news 2026/3/1 23:36:02

两个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/3/1 20:05:04

在web页面中,JAVA如何解决大文件上传的难题?

大文件传输解决方案建议书 一、需求分析与技术挑战 作为福建IT行业软件公司项目负责人&#xff0c;针对贵司提出的大文件传输需求&#xff0c;我进行了全面分析&#xff0c;发现以下几个核心挑战&#xff1a; 超大文件传输稳定性&#xff1a;单文件100G的传输及断点续传文件…

作者头像 李华
网站建设 2026/3/1 15:39:21

JAVA上传目录结构到网页有哪些技巧?

大文件传输系统建设方案 一、需求分析与技术选型 作为项目负责人&#xff0c;针对公司核心需求&#xff0c;需解决以下关键技术挑战&#xff1a; 跨平台兼容性&#xff1a;需兼容IE8等老旧浏览器及Windows 7环境高并发稳定性&#xff1a;避免传统打包下载导致的内存溢出问题…

作者头像 李华
网站建设 2026/2/27 2:29:33

JSP页面如何处理大附件上传问题?

大文件传输系统技术方案 一、技术选型与架构设计 作为项目负责人&#xff0c;我主导设计了基于现有技术栈的混合架构方案&#xff1a; 前端架构&#xff1a;采用Vue2 CLI框架兼容模式&#xff0c;通过Webpack配置同时支持Vue2/Vue3组件&#xff0c;通过条件编译实现React项目…

作者头像 李华
网站建设 2026/2/28 10:56:59

亲测好用 8个AI论文网站:研究生毕业论文写作与格式规范全测评

在当前学术研究日益数字化的背景下&#xff0c;研究生群体面临着论文写作、文献检索、格式规范等多重挑战。尤其是在AI技术广泛应用的今天&#xff0c;如何选择一款高效、专业且符合学术规范的写作工具&#xff0c;成为许多学生关注的焦点。为了帮助广大研究生更科学地挑选适合…

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

Deepoc数学大模型:赋能半导体产业,破解研发与量产核心痛点

半导体工艺向3nm及以下先进节点迭代过程中&#xff0c;芯片设计复杂度、制造精度呈几何级攀升&#xff0c;研发周期冗长、试错成本高企、高端EDA工具掣肘、量产良率难管控等行业痛点日益凸显&#xff0c;严重制约产业高质量发展。传统半导体产业以工程师经验为核心驱动&#xf…

作者头像 李华
网站建设 2026/2/20 2:57:06

计算机毕业设计springboot大学生社会实践信息管理系统 基于SpringBoot的高校社会实践活动全周期管理平台 基于SpringBoot的大学生校外实践教学信息化服务平台

计算机毕业设计springboot大学生社会实践信息管理系统0zank987 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。在高等教育深化改革的背景下&#xff0c;社会实践活动已成为培养学…

作者头像 李华