Cod sursa(job #211067)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 30 septembrie 2008 16:36:03
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
long n,a[100001],m,i,q,x,aa,b;
void pune(long p,long x)
{long y;
 y=0;
 while(p<=n)
 {a[p]+=x;
  while(!(p&(1<<y)))
   ++y;
  p+=(1<<y);++y;}
}
void ia(long p,long x)
{long y;
 y=0;
 while(p<=n)
 {a[p]-=x;
  while(!(p&(1<<y)))
   ++y;
  p+=(1<<y);++y;}
}
long suma(long p)
{long y,z;
 y=0;z=0;
 while(p>0)
 {z+=a[p];
  while(!(p&(1<<y)))
   ++y;
  p-=(1<<y);++y;}
 return z;
}
long cauta(long x)
{
 long i,j,ii;
 for(i=1;i<n;i<<=1);
 for(j=0;i;i>>=1)
    if(j+i<=n)
      if(x>=a[i+j])
        {j+=i,x-=a[j];if(x==0)return j;}
 return -1;
}
int main()
{
 freopen("datorii.in","r",stdin);
 freopen("datorii.out","w",stdout);
 scanf("%ld%ld",&n,&m);
 for(i=1;i<=n;++i){scanf("%ld",&q);pune(i,q);}
 for(i=1;i<=m;++i)
    {scanf("%ld%ld%ld",&x,&aa,&b);
     if(x==1)printf("%ld\n",suma(b)-suma(aa-1));
          else ia(aa,b);
    }
 return 0;
}