Cod sursa(job #3312794)

Utilizator tudorzzzsuiu tudor tudorzzz Data 29 septembrie 2025 22:41:35
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int v[15001];
int aib[15001];
int n,m;
int lsb (int x) {
    return x & (-x);
}
int query (int pos) {
    int sum=0;
    while (pos>0) {
        sum+=aib[pos];
        pos-=lsb(pos);
    }
    return sum;
}
void update (int pos, int increment) {
    while (pos<=n) {
        aib[pos]+=increment;
        pos+=lsb(pos);
    }
}
void scadere (int pos, int increment) {
    while (pos<=n) {
        aib[pos]-=increment;
        pos+=lsb(pos);
    }
}
int main() {
    cin>>n>>m;
    for (int i=1; i<=n; ++i) {
        cin>>v[i];
        update(i,v[i]);
    }
    int tip,a,b;
    for (int i=1; i<=m; ++i) {
        cin>>tip>>a>>b;
        if (!tip) scadere(a,b);
        else cout<<query(b)-query(a-1)<<'\n';
    }
}