Cod sursa(job #3581)

Utilizator hellraizerChiperi Matei hellraizer Data 26 decembrie 2006 21:27:27
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <stdio.h>

int n,c[15001];

void mod(int a,int b){
	while (a<=n){
		c[a]+=b;
		a+=(a&(a-1))^a;
	}
}

int sum(int a,int b){
	int s=0;
	while (b>0){
		s+=c[b];
		b-=(b&(b-1))^b;
	}
	while (a>0){
		s-=c[a];
		a-=(a&(a-1))^a;
	}
	return s;
}

int main(){
	int i,a,b,d,m;
	FILE *fin=fopen("datorii.in","r");
	FILE *fout=fopen("datorii.out","w");
	fscanf(fin,"%d",&n);
	fscanf(fin,"%d",&m);
	for (i=1;i<=n;i++){
		fscanf(fin,"%d",&a);
		mod(i,a);
	}
	for (i=1;i<=m;i++){
		fscanf(fin,"%d %d %d",&d,&a,&b);
		if (d==0)
			mod(a,-b);
		else
			fprintf(fout,"%d\n",sum(a-1,b));
	}
	fclose(fin);
	fclose(fout);
	return 0;
}