样例不过求调
查看原帖
样例不过求调
919410
Pollococido楼主2025/2/6 19:48
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, q;
int a[200010], t[200010], t1[200010];
int lowbit(int x) {
    return x & (-x);
}
void modify(int x, int num) {
    for (; x <= n; x += lowbit(x)) t[x] += num, t1[x] += (x - 1) * num;
}
int query(int x) {
    int ret(0);
    for (; x; x -= lowbit(x)) ret += x * t[x] - t1[x];
    return ret;
}

signed main() {
    cin >> n >> q;
    int lst = 0;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        modify(i, a[i] - lst);
        lst = a[i];
    }
    while (q--) {
        int opt, l, r, k;
        cin >> opt;
        if (opt == 1) {
            cin >> l >> r >> k;
            modify(l, k);
            modify(r + 1, -k);
        }
        if (opt == 2) {
            cin >> k;
            l = 1, r = 1;
            modify(l, k);
            modify(r + 1, -k);
        }
        if (opt == 3) {
            cin >> k;
            l = 1, r = 1;
            modify(l, -k);
            modify(r + 1, k);
        }
        if (opt == 4) {
            cin >> l >> r;
            cout << query(r) - query(l - 1) << endl;
        }
        if (opt == 5) {
            cout << query(1) << endl;
        }
    }
    return 0;
}
2025/2/6 19:48
加载中...