Cod sursa(job #2923858)

Utilizator db_123Balaban David db_123 Data 20 septembrie 2022 09:07:31
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin("datorii.in");
ofstream cout("datorii.out");

class Fenwick {
private:
    int n;
    vector<int> aib;
    int query(int node) {
        int ix=node,sum=0;
        while(ix>0) {
            sum+=aib[ix];
            ix-=(ix & (~ix+1));
        }
        return sum;
    }
public:
    void init(int n) {
        this->n=n;
        aib.resize(n+1);
    }
    void update(int node,int val) {
        int ix=node;
        while(ix<=n) {
            aib[ix]+=val;
            ix+=(ix & (~ix+1));
        }
    }
    int query(int l,int r) {
        return query(r)-query(l-1);
    }
};

int n,m;
vector<int> v;

void read() {
    cin>>n>>m;
    v.resize(n+1);
    for(int i=1;i<=n;i++) {
        cin>>v[i];
    }
}

void solve() {
    Fenwick obj;
    obj.init(n);
    for(int i=1;i<=n;i++) {
        obj.update(i,v[i]);
    }
    int a,b,c;
    for(int i=1;i<=m;i++) {
        cin>>a>>b>>c;
        if(a==0) {
            // cout<<"updating... node: "<<b<<" | val: "<<-c<<"\n";
            obj.update(b,-c);
        }
        else {
            cout<<obj.query(b,c)<<"\n";
        }
    }
}

int main() {
 
    read();
    solve();   
    return 0;
}