Cod sursa(job #526937)

Utilizator R.A.RFMI Romila Remus Arthur R.A.R Data 29 ianuarie 2011 21:14:13
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#define nmax 150000
using namespace std;

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

int C[nmax];

void update(int nod,int l,int r,int p,int val)
{
    int m;
    C[nod]+=val;
    if(l==r)return ;
    m=(l+r)/2;
    if(p<=m)
        update(2*nod,l,m,p,val);
    else update(2*nod+1,m+1,r,p,val);
}

int query(int nod,int l,int r,int a,int b)
{
    int m,t=0;
    if(a<=l&&r<=b)
        return C[nod];
    else
    {
        m=(l+r)/2;
        if(a<=m)
            t+=query(2*nod,l,m,a,b);
        if(b>m)
            t+=query(2*nod+1,m+1,r,a,b);
        return t;
    }
}

int main()
{
    int N,M,i,v,x;
    in>>N>>M;
    for(i=1;i<=N;i++)
        in>>v,update(1,1,N,i,v);
    while(M--)
    {
        in>>x>>i>>v;//x-operatia,i-clientul,v-valoarea
                    //x-operatia,i-clientulS,v-clientulF
        if(!x)
            update(1,1,N,i,-v);//achitare
        else
            out<<query(1,1,N,i,v)<<'\n';

    }
    return 0;
}