Cod sursa(job #93875)

Utilizator corneliuLungociu Corneliu corneliu Data 20 octombrie 2007 15:37:43
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>

long m,n,b[15000];
int a[15000];

int suma(int i){
	int s=0;
	while (i>0){
		s+=a[i];
		i-=(i^(i-1))&i;
	}
	
	return s;
}

void modificare(int i,int x, int semn){
	while (i<=n) {
		a[i]+=semn*x;
		i+=(i ^ (i-1)) & i;//i=i+(i xor (i-1)and i) pe biti
	}

}

void citire(){
	int x;
	scanf("%ld%ld",&n,&m);
	for (int i=1; i<=n; i++){
		scanf("%d",&x);
		modificare(i,x,1);
	}
	
}

void calc(){
	int p,x,y;
	for (int i=1; i<=m; i++){
		scanf("%d%d%d",&p,&x,&y);
		if (p==0) {	//modificare
				modificare(x,y,-1);
		}
		else
			printf("%d\n",suma(y)-suma(x-1));
	}
}

int main(){
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	citire();
	calc();
	fclose(stdin);
	fclose(stdout);
	return 0;
}