news 2026/6/21 19:57:03

两个bm|分块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
两个bm|分块

C++ 分块算法模板,适合区间修改、区间查询类问题(如区间加、区间和),直接就能用

#include <iostream>

#include <vector>

#include <cmath>

using namespace std;

const int MAXN = 1e5 + 5;

int a[MAXN]; // 原数组

long long sum[MAXN]; // 每块的和

int add[MAXN]; // 每块的懒标记(增量)

int block_size; // 块大小

int n;

// 初始化分块

void init() {

block_size = sqrt(n);

for (int i = 1; i <= n; i++) {

int bid = i / block_size;

sum[bid] += a[i];

}

}

// 区间加 [l, r] += val

void update(int l, int r, int val) {

int bl = l / block_size;

int br = r / block_size;

if (bl == br) {

// 同一块,暴力修改

for (int i = l; i <= r; i++) {

a[i] += val;

sum[bl] += val;

}

} else {

// 左边碎块

for (int i = l; i < (bl + 1) * block_size; i++) {

a[i] += val;

sum[bl] += val;

}

// 中间整块

for (int i = bl + 1; i < br; i++) {

add[i] += val;

}

// 右边碎块

for (int i = br * block_size; i <= r; i++) {

a[i] += val;

sum[br] += val;

}

}

}

// 区间查询 [l, r] 的和

long long query(int l, int r) {

long long res = 0;

int bl = l / block_size;

int br = r / block_size;

if (bl == br) {

for (int i = l; i <= r; i++)

res += a[i] + add[bl];

} else {

for (int i = l; i < (bl + 1) * block_size; i++) {

res += a[i] + add[bl];

}

for (int i = bl + 1; i < br; i++)

res += sum[i] + (long long)add[i] * block_size;

for (int i = br * block_size; i <= r; i++)

res += a[i] + add[br];

}

return res;

}

int main() {

ios::sync_with_stdio(false);

cin.tie(0);

// 读入 n、数组 a

// init();

// 处理 update / query

return 0;

}

用法

- 块大小默认: sqrt(n) ,最常用

- update(l, r, val) :区间 [l, r] 加 val

- query(l, r) :查询区间和

- 下标从 1 开始,符合竞赛习惯

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/21 12:48:42

政务CMS如何用TinyMCE实现PDF表单数据到Word的映射?

VUE后台管理中使用富文本编辑器导入word 文档进行编辑 前言 最近因业务需求在项目中嵌入了tinymce这个编辑器&#xff0c;用于满足平台给用户编辑各类新闻内容什么的业务需求&#xff0c;前后也花了不少时间体验和对比了市面上各类开源编辑器&#xff0c;直接将新闻部门的工作…

作者头像 李华
网站建设 2026/6/17 0:45:49

C# 实现与三菱 PLC 以太网通讯:打造功能强大的上位机程序

C#与三菱PLC以太网通讯程序上位机源码 通过3E帧SLMP /MC协议与三菱FX5U/Q系列PLC通讯 1.该程序可以与FX5U/Q系列PLC以太网通讯&#xff0c;根据3E帧报文写了一个类库&#xff0c;可以读写各种类型和区域变量。 2.支持单个变量读写和数组类型批量读写。 3.可以实时检测网络通断…

作者头像 李华
网站建设 2026/6/20 21:17:03

好写作AI:开题答辩前夜,如何用AI把“还行”变成“必过”

导语&#xff1a;当导师说出“题目再想想”时&#xff0c;你的开题进度条就卡在了99%每个研究生都经历过选题的“死亡循环”&#xff1a;第一版题目&#xff1a;宏大如国家社科基金&#xff08;导师批&#xff1a;太空泛&#xff09;第二版题目&#xff1a;具体到某个县城案例&…

作者头像 李华
网站建设 2026/6/15 20:37:43

参考文献崩了?9个AI论文网站测评:本科生毕业论文+学术写作全攻略

在当前学术研究日益数字化的背景下&#xff0c;本科生在撰写毕业论文过程中常常面临文献检索困难、写作效率低、格式规范不熟悉等挑战。尤其是在AI技术快速发展的今天&#xff0c;如何选择一款真正适合自己的学术辅助工具&#xff0c;成为许多学生关注的焦点。为此&#xff0c;…

作者头像 李华
网站建设 2026/6/16 18:56:14

怎么知道本地的Redis有没有设置密码

进入到Redis的安装目录&#xff1a;双击【redis-server.exe】,如果双击之后窗口一闪而过&#xff0c; 检查一下默认的6379端口是否被占用&#xff1a; # 查看 6379 端口是否被占用 netstat -ano | findstr 6379 如果输出类似下面这样的信息&#xff1a; # 类似这样的输出: TCP…

作者头像 李华