这题为什么不能用树状数组实现?
查看原帖
这题为什么不能用树状数组实现?
574944
Micnation_AFO楼主2021/11/20 08:56

rt,连样例都过不了:

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define lowbit(x) (x & (-x))
#define maxn 100005
int n, m, a;
int c[maxn];

void add(int x, int y) {
    for (; x <= n; x += lowbit(x)) c[x] += y;
}

int ask(int x) {
    int ans = 0;
    for (; x; x -= lowbit(x)) ans += c[x];
    return ans;
}

signed main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) cin >> a, add(i, a);
    for (int i = 1; i <= m; i++) {
        int opt; cin >> opt;
        if (opt == 1) {
            int x, y, k;
            cin >> x >> y >> k;
            add(x, k), add(y, -k);
        }
        else {
            int x, y;
            cin >> x >> y;
            cout << ask(y) - ask(x - 1) << endl;
        }
    }
    return 0;
}

2021/11/20 08:56
加载中...