社区讨论
0分求调
P13976数列分块入门 1参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mkmhk1bw
- 此快照首次捕获于
- 2026/01/20 19:03 2 个月前
- 此快照最后确认于
- 2026/01/24 10:26 上个月
CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e5 + 5;
int n;
int opt, l, r;
ll a[N], c[N], ans, k;
ll lowbit(int x) { return x & -x; }
void insert(int x, int k) {
while (x <= n) {
c[x] += k;
x += lowbit(x);
}
}
ll query(int x) {
ll cnt = 0;
while (x > 0) {
cnt += c[x];
x -= lowbit(x);
}
return cnt;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i ++) scanf("%d", &a[i]);
for (int i = 1; i <= n; i ++) insert(i, a[i] - a[i - 1]);
int m = n;
while (m --) {
scanf("%d %d %d %lld", &opt, &l, &r, &k);
if (opt == 0) insert(l, k), insert(r + 1, -k);
else if (opt == 1) printf("%lld\n", query(r));
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...