Cod sursa(job #718861)

Utilizator hiticas_abelhiticasabel hiticas_abel Data 21 martie 2012 10:29:04
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream>
#include<stdio.h>
#define zeros(x) ((x^(x-1))&x)

int n, sum;
int aib[15000];

void actualizare(int poz, int val )
{
int i;
for(i=poz;i<=n;i+=zeros(i))
  {
  aib[i]+=val;
  }     
}

void interogare (int st, int dr)
{
  if(st==1)
  {
  int i;
  for(i=dr;i>=1;i-=zeros(i))
    
    sum+=aib[i];
             
  }
  else
  {
  interogare(1,st-1);
  sum=-sum;
  interogare(1,dr);    
  
  }    
}

void rezolv()
{
int n,m,i,x,y,z;
freopen ("datorii.in","r",stdin);
freopen ("datorii.out","w",stdout);

scanf ("%d %d\n", &n,&m);
for(i=1;i<=n;i++)
{
scanf ("%d", &x);
actualizare(i,x);                 
}
  for(i=1;i<=m;i++)
  {scanf("%d %d %d\n",&x, &y, &z);
   if(x)
   {
    sum=0;
    interogare(y,z);
    printf("%d\n", sum);     
   }
   else
   {
    actualizare(y,-z);    
   }
                     
  }

}
     int main()
     {
     rezolv();
     return 0;
         
     }