Cod sursa(job #1213244)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 27 iulie 2014 17:23:37
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
 #include<stdio.h>
 #define MAXN 15005
 #define LL  long long
 int N,C,S,K,P;
 LL M,A[MAXN],Q,T;
 void aduna(int poz,LL val)
 {
  	  C=0;
  	  while( poz<=N )
  	  {
	   A[poz]+=val;
	   while(!(poz & 1<<C)) C++;
	   poz+=(1<<C);
	   C+=1;
	   } //end while
}
void scade(int poz,LL val)
 {
  	  C=0;
  	  while( poz<=N )
  	  {
	   A[poz]-=val;
	   while(!(poz & 1<<C)) C++;
	   poz+=(1<<C);
	   C+=1;
	   } //end while
}
LL suma(int poz)
{
 	C=0,S=0;
	while(poz>0)
	{
	 S+=A[poz];
	 while(!(poz & (1<<C)) ) C++;
	 poz-=(1<<C);
	 C+=1;
	 }
 return S;
}	 			  
 int main() {
 	 int i,j;
 	 freopen("datorii.in","r",stdin);
 	 freopen("datorii.out","w",stdout);
 	 scanf("%lld %lld",&N,&M);
 	 for(i=1;i<=N;i++) {
 	         scanf("%lld",&T);
 	         aduna(i,T);
			 }
 	 for(i=1;i<=M;i++) {
	         scanf("%d%d%d",&K,&P,&Q);
			 if(K==0)  scade(P,Q);
		       else printf("%lld\n",suma(Q)-suma(P-1));   
    }
	return 0;
}