Cod sursa(job #633298)

Utilizator KoniacDocea Andrei Koniac Data 13 noiembrie 2011 15:12:06
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>
#define lim 30001

FILE*f=fopen("datorii.in","r");
FILE*g=fopen("datorii.out","w");

int n,m,a,b,x;
int w[lim],v[lim];

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(f);
	fclose(g);
	return 0;
}