Cod sursa(job #3293174)

Utilizator philippe98Colta Philippe Andrei philippe98 Data 10 aprilie 2025 15:39:39
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<iostream>
#include<fstream>
using namespace std;
int n, q;
int v[15005];
int aib[15005];


int ub(int x) {
    return (x & (-x));//cel mai din dreapta bit setat cu 1
}

void add(int x, int y) {
    while (x <= n) {
        aib[x]-=y;
        x += ub(x);//mergem pe fiecare bit setat de 1
    }
}
int sum(int x) {
    int rez = 0;
    //suma de la 1 la x
    while (x > 0) {
        rez +=  aib[x];
        x -= ub(x);
    }
    return rez;
}
int main() {
    ifstream cin("datorii.in");
    ofstream cout("datorii.out");

    cin >> n >> q;
    for (int i = 1; i<=n; i++) {
        cin >> v[i];
        add(i, -v[i]);
    }

    while (q--) {
        int c, x, y;
        cin >> c >> x >> y;
        if (c == 0) {
            //update pt v[x] -= y
            add(x, y);
        }
        else {
            //sum x y
            cout << sum(y) - sum(x-1) << '\n'   ;
        }
    }

    return 0;
}