Cod sursa(job #1280479)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 1 decembrie 2014 23:48:23
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#define dim 15002

using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
long long v[4*dim],n,m,cif,x,poz,sum,i;
void parc(int nod,int p,int u){
    if(p==u){
        fin>>v[nod];
        return;
    }
    int m=(p+u)/2;
    parc(2*nod,p,m);
    parc(2*nod+1,m+1,u);
    v[nod]=v[2*nod]+v[2*nod+1];

}
void update(int nod,int p, int u){
    if(p==u){
        v[nod]-=x;
        return;
    }
    int m=(p+u)/2;
    if(poz<=m)
        update(2*nod,p,m);
    if(poz>m)
        update(2*nod+1,m+1,u);
    v[nod]=v[2*nod]+v[2*nod+1];

}
void query(int nod,int p,int u){
    if(p>=x && u<=poz){
        sum+=v[nod];
        return;
    }
    int m=(p+u)/2;
    if(m>=x)
        query(2*nod,p,m);
    if(m<poz)
        query(2*nod+1,m+1,u);

}
int main(){
    fin>>n>>m;
    parc(1,1,n);
    for(i=1;i<=m;i++){
        fin>>cif>>poz>>x;
        if(cif==0)
            update(1,1,n);
        else{
            sum=x;
            x=poz;
            poz=sum;
            sum=0;
            query(1,1,n);
            fout<<sum<<'\n';
            }
    }
    fin.close();fout.close();
    return 0;
}