为什么输出是样例的正好两倍
查看原帖
为什么输出是样例的正好两倍
637788
kimi0705楼主2023/7/18 16:14
#include <bits/stdc++.h>
using namespace std;
const int N = 100001;
int n, m, tree[N], w, x, y, z, last;
inline int lowbit(int x) { return x & (-x); }
void add(int x, int y) {
    while (x <= n) {
        tree[x] += y;
        x += lowbit(x);
    }
}
int sum(int x) {
    int ans = 0;
    while (x > 0) {
        ans += tree[x];
        x -= lowbit(x);
    }
    return ans;
}
int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> x;
        add(i, x - last);
        x = last;
    }
    for (int i = 1; i <= m; i++) {
      cin >> w;
      if(w == 1) {
        cin >> x >> y >> z;
        add(x, z);
        add(y + 1, -z);
      } else {
        cin >> x;
        cout << sum(x) << '\n';
      }
    }
}
2023/7/18 16:14
加载中...