Cod sursa(job #968663)

Utilizator mlupseLupse-Turpan Mircea mlupse Data 2 iulie 2013 15:16:36
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#define NMax 15005
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int N,M,AINT[NMax],Sum;
void Update(int nod,int left,int right,int pos, int val)
{
    if(left==right)
        {
            AINT[nod]=AINT[nod]-val;
        }
    else
        {
         int mid=(left+right)/2;
         if(pos<=mid)
            Update(2*nod,left,mid,pos,val);
         else
            Update(2*nod+1,mid+1,right,pos,val);
        AINT[nod]=AINT[2*nod]+AINT[2*nod+1];
        }
}
void Query(int nod, int left, int right, int start, int finish)
{
    if((start<=left) &&(right<=finish))
        Sum+=AINT[nod];
    else
        {
            int mid=(left+right)/2;
            if(start<=mid) Query(2*nod,left,mid,start,finish);
            if(mid<finish) Query(2*nod+1,mid+1,right,start,finish);
        }
}
int main()
{   int val,op,a,b;
    fin>>N>>M;
    for(int i=1;i<=N;i++)
        {
            fin>>val;
            Update(1,1,N,i,-val);
        }
    while(M--)
    {
        fin>>op>>a>>b;
        if(op==0)
            {
                Update(1,1,N,a,b);
            }
        if(op==1)
            {
                Sum=0;
                Query(1,1,N,a,b);
                fout<<Sum<<"\n";
            }
    }
    return 0;
}