Cod sursa(job #782265)

Utilizator oana_popfmi - pop oana oana_pop Data 26 august 2012 16:20:05
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>
using namespace std;
#define MAXN 15010

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

int n,m,start,finish,val,pos,suma;
int a[4*MAXN+66];

void update(int nod,int left,int right)
{
     if(left==right)
     {
                    a[nod]=a[nod]+val;
                    return;
     }
     int mij=(left+right)/2;
     if(pos<=mij) update(2*nod,left,mij);
     else update(2*nod+1,mij+1,right);
     a[nod]=a[2*nod]+a[2*nod+1];
     
}

void query(int nod,int left,int right)
{
     if(start<=left && right<=finish)
     {
                    suma=suma+a[nod];
                    return;
     }
     int mij=(left+right)/2;
     if(start<=mij) query(2*nod,left,mij);
     if(mij<finish) query(2*nod+1,mij+1,right);
}

int main()
{
    int N,M,X,op,A,B;
    f>>N>>M;
    
    for(int i=1; i<=N;  i++)
    {
            f>>X;
            val=X;
            pos=i;
            update(1,1,N);
    }
    
    for(int i=1 ; i<=M; i++)
    {
            f>>op>>A>>B;
            if(op==0)
            {
                     pos=A;
                     val=-B;
                     update(1,1,N);
            }
            else
            {
                suma=0;
                start=A; finish=B;
                query(1,1,N);
                g<<suma<<endl;
            }
            
    }

}