Cod sursa(job #329678)

Utilizator points_hunterAdrian Dobrescu points_hunter Data 7 iulie 2009 08:45:05
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>
#include<stdlib.h>

int main(){
  freopen("datorii.in","r",stdin);
  freopen("datorii.out","w",stdout);
  int n,m,*a,*aib;
  scanf("%d%d",&n,&m);
  a=(int *)calloc(n+1,sizeof(int));
  aib=(int *)calloc(n+1,sizeof(int));
  int i,op,p,q,x,s1,s2;
  for(i=1;i<=n;i++){
    scanf("%d",&x);
    a[i]=a[i-1]+x;
  }
  for(i=1;i<=n;i++)
    aib[i]=a[i]-a[i-((i^(i-1))&i)];
  for(i=1;i<=m;i++){
    scanf("%d%d%d",&op,&p,&q);
    if(op==0){
      x=p;
      while(x<=n){
	aib[x]-=q;
	x+=(x^(x-1))&x;
      }
    }
    else{
      x=p-1;
      s1=0;s2=0;
      while(x){
	s1+=aib[x];
	x-=(x^(x-1))&x;
      }
      x=q;
      while(x){
	s2+=aib[x];
	x-=(x^(x-1))&x;
      }
      printf("%d\n",s2-s1);
    }
  }
return 0;
}