Cod sursa(job #3180112)

Utilizator ovidiu2007pavel ovidiu ovidiu2007 Data 4 decembrie 2023 17:23:52
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <vector>

using namespace std;

int pow2(int n) {
    return (n & (-n));
}

void update(vector<int> &aib, int n, int p, int val) {
    while(p <= n) {
        aib[p] += val;
        p += pow2(p);
    }
}

long long query(vector<int> &aib, int p) {
    long long res = 0;
    while(p != 0) {
        res += aib[p];
        p -= pow2(p);
    }

    return res;
}

int main()
{
    ifstream cin("datorii.in");
    ofstream cout("datorii.out");
    int n, m, val;
    cin >> n >> m;
    vector<int> aib(n + 1, 0);
    for(int i = 1; i <= n; i++) {
        cin >> val;
        update(aib, n, i, val);
    }
    int c;
    for(int i = 1; i <= m; i++) {
        cin >> c;
        if(c == 0) {
            int zi, suma;
            cin >> zi >> suma;
            update(aib, n, zi, -suma);
        } else {
            int st, dr;
            cin >> st >> dr;
            cout << query(aib, dr) - query(aib, st-1) << "\n";
        }
    }
    cin.close();
    cout.close();
    return 0;
}