Cod sursa(job #216022)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 22 octombrie 2008 08:53:00
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>

long a[60000];
long op,i,m,n,dat,ziua,x,y;

void update(long nod, long st, long dr)
{
  long mij;
  if (st==dr)
   a[nod]+=dat;
  else
   {
    mij=(st+dr)/2;
    if (ziua<=mij)
     update(2*nod,st,mij);
    else
     update(2*nod+1,mij+1,dr);
    a[nod]=a[2*nod]+a[2*nod+1];
   }
}

long query(long nod, long st, long dr)
{
 long mij,s;
 if (x<=st && y>=dr)
  return a[nod];
 else
  if (st<dr)
  {
   mij=(st+dr)/2;
   s=0;
   if (x<=mij)
    s=s+query(nod*2,st,mij);
   if (y>mij)
    s=s+query(nod*2+1,mij+1,dr);
   return s;
  }
  return 0;
}

int main()
{
 freopen("datorii.in","r",stdin);
 freopen("datorii.out","w",stdout);
 scanf("%ld %ld",&n, &m);
 for (ziua=1; ziua<=n; ++ziua)
 {
  scanf("%ld",&dat);
  update(1,1,n);
 }
 for (i=1; i<=m; ++i)
 {
  scanf("%ld",&op);
  if (op==1)
  {
   scanf("%ld %ld",&x,&y);
   printf("%ld\n",query(1,1,n));
  }
  else
  {
   scanf("%ld %ld",&ziua,&dat);
   dat=-dat;
   update(1,1,n);
  }
 }
 fclose(stdin); fclose(stdout);
 return 0;
}