Cod sursa(job #46147)

Utilizator mike4problemsRadu Gabriel mike4problems Data 2 aprilie 2007 13:08:41
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<cstdio>
using namespace std;

long long h[15001],n,m;

void nbit(long long,long long&);
long long sum2(long long);
long long sum(long long,long long);
void mod(long long,long long);

int main()
 {
 freopen("datorii.in","r",stdin);
 freopen("datorii.out","w",stdout);
 scanf("%lld%lld",&n,&m);
 long long opt,i,j,k;
 for(i=1;i<=n;i++) 
  { 
  scanf("%lld",&j);
  if(j) mod(i,j);
  }
 for(k=0;k<m;k++)
  {
  scanf("%lld%lld%lld",&opt,&i,&j);
  if(!opt) mod(i,-j);
  else printf("%lld\n",sum(i,j));
  }
 return 0;
 }
 
long long sum2(long long x)
 {
 long long s=0,t=1;
 while(x)
  {
  s+=h[x];
  while(!(x&t)) t<<=1;
  x-=t;
  t<<=1;
  }
 return s;
 }
 
long long sum(long long a,long long b)
 {
 return sum2(b)-sum2(a-1);
 }
 
void mod(long long x,long long val)
 {
 long long t=1;
 while(x<=n)
  {
  h[x]+=val;
  while(!(x&t)) t<<=1;
  x+=t;
  t<<=1;
  }
 }