社区讨论

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 条回复,欢迎继续交流。

正在加载回复...