Cod sursa(job #3311592)

Utilizator pkseVlad Bondoc pkse Data 23 septembrie 2025 15:10:52
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>
using namespace std;

int lsb(int x) {
    return x & (-x);
}

struct AIB {
    vector<int> a;
    int n;

    AIB(int N) {
        N = n;
        a.resize(n);
    }

    void update(int p, int val) {
        if(p > n)
            return;
        a[p - 1] += val;
        update(p + lsb(p), val);
    }

    int pf(int p) {
        if(p == 0)
            return 0;
        return a[p - 1] + pf(p - lsb(p));
    }
};

int main() {
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    int n, q; cin >> n >> q;
    AIB aib(n);
    for(int i = 0; i < n; i ++) {
        int x; cin >> x;
        aib.update(i + 1, x);
    }
    for(int i = 0; i < n; i ++) {
        int cer; cin >> cer;
        if(cer == 0) {
            int p, val; cin >> p >> val;
            aib.update(p, -val);
        } else {
            int st, dr; cin >> st >> dr; st --;
            cout << aib.pf(dr) - aib.pf(st) << '\n';
        }
    }
}