news 2026/9/25 5:43:52

两个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/9/24 3:10:42

照着用就行:自考必备的降AI率平台,千笔·降AIGC助手 VS 灵感ai

在AI技术迅速发展的今天&#xff0c;越来越多的学生开始借助AI工具辅助论文写作&#xff0c;以提升效率和内容质量。然而&#xff0c;随着各大查重系统对AI生成内容的识别能力不断提升&#xff0c;AI率超标问题日益突出&#xff0c;成为许多学生毕业路上的“拦路虎”。无论是知…

作者头像 李华
网站建设 2026/9/24 15:13:06

Windows 11 终极性能优化指南

一、精简后台&#xff1a;关闭非必要的系统服务目标&#xff1a;禁用日常使用中无需的系统服务&#xff0c;以减少内存与磁盘资源的占用。操作步骤&#xff1a;打开服务管理器&#xff1a;按下 Win R 键&#xff0c;输入 services.msc 并回车。定位并禁用建议服务&#xff08;…

作者头像 李华
网站建设 2026/9/24 5:51:15

JAVA如何处理网页中的文件夹上传需求?

大文件传输系统解决方案 - 北京教育行业国企专项提案 作为北京教育行业国企项目负责人&#xff0c;我深刻理解贵司在大文件传输方面面临的挑战。基于贵司提出的详细需求&#xff0c;我司特别定制了以下解决方案。 一、核心功能实现方案 1. 百GB级文件传输技术实现 分块传输…

作者头像 李华
网站建设 2026/9/21 21:35:02

crypto-紧急需求-可远程需求:1、套利策略pm、qr;2、CTA 策略pm、qr;3、算法执行交易员;4、Defi 研究员;5、投资者关系(市场岗);6、数据库工程师;7、CTO

crypto-紧急需求-可远程 需求&#xff1a; 1、套利策略pm、qr&#xff1b; 2、CTA 策略pm、qr&#xff1b; 3、算法执行交易员&#xff1b; 4、Defi 研究员&#xff1b; 5、投资者关系&#xff08;市场岗&#xff09;&#xff1b; 6、数据库工程师&#xff1b; 7、CTO&#xff…

作者头像 李华
网站建设 2026/9/24 14:08:15

第三章 第一节 货币资金 核心知识点

一、货币资金总述定义&#xff1a;企业生产经营过程中处于货币形态的资产&#xff0c;是流动资产的重要组成部分。构成&#xff1a;库存现金 银行存款 其他货币资金&#xff08;资产负债表中货币资金计算公式&#xff09;。资产分类归属&#xff1a;货币资金属于流动资产&…

作者头像 李华