Cod sursa(job #352719)

Utilizator irene_mFMI Irina Iancu irene_m Data 3 octombrie 2009 12:21:51
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>
#define MaxN 15050
#define fs(x)     ((x)*2)
#define fd(x)     ((x)*2+1)

using namespace std;

long N,M,arb[4*MaxN],pos,val,i,op,a,b,S;

void Update(long nod,long st,long dr)
{
      if(st==dr)
      {
            arb[nod]+=val;
            return;
      }
      long div=(st+dr)/2;
      if(pos<=div)
            Update(fs(nod),st,div);
      else
            Update(fd(nod),div+1,dr);
      arb[nod]=arb[fs(nod)]+arb[fd(nod)];
}

void Query(long nod,long st,long dr)
{
      if(st>=a && dr<=b)
      {
            S+=arb[nod];
            return;
      }
      long div=(st+dr)/2;
      if(a<=div)
            Query(fs(nod),st,div);
      if(div<b)
            Query(fd(nod),div+1,dr);
}

int main()
{
      ifstream fin("datorii.in");
      ofstream fout("datorii.out");
      fin>>N>>M;

      for(i=1;i<=N;i++)
      {
            fin>>val;
            pos=i;
            Update(1,1,N);
      }

      for(i=1;i<=M;i++)
      {
            fin>>op>>a>>b;
            if(op)
            {
                  S=0;
                  Query(1,1,N);
                  fout<<S<<"\n";
            }
            else
            {
                  pos=a;
                  val=-b;
                  Update(1,1,N);
            }
      }
      fin.close();
      fout.close();
      return 0;
}