专栏文章

题解:P13976 数列分块入门 1

P13976题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miny8jqq
此快照首次捕获于
2025/12/02 10:18
3 个月前
此快照最后确认于
2025/12/02 10:18
3 个月前
查看原文
跑的飞块。5e5 250ms。
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[1 << 19], B[1 << 10], n, q;

signed main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> n >> q;
	for (int i = 1; i <= n; i++)
		cin >> a[i], B[i >> 10] += a[i];
	while (q--) {
		int op, l, r, L, R, res = 0;
		cin >> op >> l >> r;
		if (op == 1)
			a[l] += r, B[l >> 10] += r;
		else {
			L = l >> 10, R = r >> 10;
			if (L ^ R) {
				for (int i = l; i < (L + 1) << 10; i++)
					res += a[i];
				for (int i = L + 1; i < R; i++)
					res += B[i];
				for (int i = R << 10; i <= r; i++)
					res += a[i];
			} else
				for (int i = l; i <= r; i++)
					res += a[i];
			cout << res << '\n';
		}
	}
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...