Cod sursa(job #2098593)

Utilizator wilson182Alexandrina Panfil wilson182 Data 3 ianuarie 2018 09:55:55
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<bits/stdc++.h>
using namespace std;
const int N=60020;
int a[N], val, pos, r, l, s;
void update(int nod, int st, int dr){
    if(st==dr){
        a[nod]+=val;
        return;
    }
    int m=(st+dr)/2;
    if(pos<=m) update(nod*2, st, m); else update(nod*2+1, m+1, dr);
    a[nod]=a[nod*2]+a[nod*2+1];
}
void query(int nod, int st, int dr){
    if(l <= st && dr <= r){
        s+=a[nod];
        return;
    }
    int m=(st+dr)/2;
    if(m >=l) query(nod*2, st, m);
    if(m < r) query(nod*2+1, m+1, dr);
}
int main(){
    int n, m;
    ifstream f("datorii.in");
    ofstream g("datorii.out");
    f>>n>>m;
    for(int i=1;i<=n;i++){
        pos=i;
        f>>val;
        update(1,1,n);
    }
    int k;
    while(m--){
        f>>k;
        if(k==0){
            f>>pos>>val;
            val=0-val;
            update(1,1,n);
        }else{
            f>>l>>r;
            s=0;
            query(1,1,n);
            g<<s<<'\n';
        }
    }
    return 0;
}