Cod sursa(job #632331)

Utilizator Robert29FMI Tilica Robert Robert29 Data 10 noiembrie 2011 21:21:48
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>
FILE*f=fopen("datorii.in","r");
FILE*g=fopen("datorii.out","w");
int n,m,a,b,x,w[30001],v[30001];
int main() {
	fscanf(f,"%d%d",&n,&m);
	for(int i=1;i<=n;++i)
		fscanf(f,"%d",&v[i]);
	for(int i=1;i<=n;++i){
		int y=(i^(i-1))&i;
		for(int j=i-y+1;j<=i;++j)
			w[i]+=v[j];
	}
	for(int i=1;i<=m;++i){
		fscanf(f,"%d",&x);
		if(!x){
			fscanf(f,"%d%d",&a,&b);
			while(a<=n){
				w[a]-=b;
				a+=(a^(a-1))&a;
			}
		}else if(x==1){
			fscanf(f,"%d%d",&a,&b);
			a--;
			int x=0;
			int y=0;
			while(b){
				x+=w[b];
				b-=(b^(b-1))&b;
			}
			while(a){
				y+=w[a];
				a-=(a^(a-1))&a;
			}
			fprintf(g,"%d\n",x-y);
		}
		
	}
	
	fclose(g);
	fclose(f);
	return 0;
}