LOJ6277 数列分块入门 1
题面
给出一个长为 的数列,以及 个操作,操作涉及区间加法,单点查值。
。数据在 int
范围内。
思路
分块模板题。
先对数列分成 块,然后查询就是数据+ tag
,但是更新怎么办呢?
先对非整块直接暴力修改,然后再整块累加即可。
时间复杂度
分块 。
查询 。
修改 。
总时间复杂度 。
代码
#include <bits/stdc++.h>
using namespace std;
int n;
int block;
int v[50005];
int ba[50005];
int tag[50005];
void update(int a, int b, int c) {
for (int i = a; i <= min(ba[a]*block, b); i++) {
v[i] += c;
}
if (ba[a] != ba[b]) {
for (int i = (ba[b] - 1) * block + 1; i <= b; i++) {
v[i] += c;
}
}
for (int i = ba[a] + 1; i <= ba[b] - 1; i++) {
tag[i] += c;
}
}
int query(int y) {
return v[y] + tag[ba[y]];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> v[i];
}
block = sqrt(n);
for (int i = 1; i <= n; i++) {
ba[i] = (i - 1) / block + 1;
}
for (int i = 1; i <= n; i++) {
int op, x, y, z;
cin >> op >> x >> y >> z;
if (op == 0) {
update(x, y, z);
} else {
cout << query(y) << endl;
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧