Cod sursa(job #501836)

Utilizator theodora_maneaManea Theodora Maria theodora_manea Data 16 noiembrie 2010 19:53:30
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>

int v[50000];
int i,n,m,x,poz,sum,y,nr;

void insert(int nod,int st,int dr) {
	int m;
	v[nod]+=x;
	m=(st+dr)/2;
	if (st!=dr) {
		if (poz<=m) 
			insert(2*nod,st,m);
		else 
			insert(2*nod+1,m+1,dr);
	}
}

void cauta(int nod, int st,int dr,int a,int b) {
	int m;
	if (a<=st && dr<=b) 
		sum+=v[nod];
	else {
		m=(st+dr)/2;
		if (a<=m) cauta(2*nod,st,m,a,b);
		if (b>m) cauta(2*nod+1,m+1,dr,a,b);
	}
}
	
int main () {
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d%d",&n,&m);
	for (i=1; i<=n; i++) {
		scanf("%d",&x);
		poz=i;
		insert(1,1,n);
	}
	for (i=1; i<=m; i++) {
		scanf("%d%d%d",&nr,&y,&x);
		if (nr==0) {
			poz=y;
			x=-x;
			insert(1,1,n);
		}
		else {
			sum=0;
			cauta(1,1,n,y,x);
			printf("%d\n",sum);
		}
	}
	return 0;
}