Cod sursa(job #38797)

Utilizator razvi9Jurca Razvan razvi9 Data 26 martie 2007 10:03:34
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include<stdio.h>
int n,m,a[15001],x,y,ok,doi[14]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192},zero[15001];
void adaug(int i,int x)
{do
 {a[i]=a[i]+x;
  i=i+doi[zero[i]];}while(i<=n);}
int sum(int x)
{int s=0;
 do{s=s+a[x];
 x=x-doi[zero[x]];
 }while(x>0);
 return s;}
int main()
{freopen("datorii.in","r",stdin);
 freopen("datorii.out","w",stdout);
 scanf("%d %d",&n,&m);
 for(x=2;x<=n;x=x+2)
 {for(y=0;(doi[y]&x)==0;y++);
  zero[x]=y;}
 for(x=1;x<=n;x++)
 {scanf("%d",&y);
  adaug(x,y);}
 for(;m;m--)
 {scanf("%d %d %d",&ok,&x,&y);
  if(ok) printf("%d\n",sum(y)-sum(x-1));
  else adaug(x,-y);}
 return 0;}