Cod sursa(job #644633)

Utilizator theodora_maneaManea Theodora Maria theodora_manea Data 7 decembrie 2011 11:06:30
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

int i,n,m,poz,x,a,b,op,sum;
int arb[1<<14];

void actualizare(int nod,int st,int dr) {
	if (poz<=st && dr<=poz) {
		arb[nod]+=x;
		return;
	}
	int m=(st+dr)/2;
	if (poz<=m) actualizare(2*nod,st,m);
	       else actualizare(2*nod+1,m+1,dr);
	arb[nod]=arb[2*nod]+arb[2*nod+1];
}

void interogare(int nod,int st,int dr) {
	if (a<=st && dr<=b) {
		sum+=arb[nod];
		return;
	}
	int m=(st+dr)/2;
	if (a<=m) interogare(2*nod,st,m);
	if (b>m) interogare(2*nod+1,m+1,dr);
}

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;
		actualizare(1,1,n);
	}
	
	for (i=1; i<=m; i++) {
		scanf("%d%d%d",&op,&a,&b);
		if (op==0) {
			poz=a;
			x=-b;
			actualizare(1,1,n);
		}
		else
			if (op==1) {
				sum=0;
				interogare(1,1,n);
				printf("%d\n",sum);
			}
	}
	return 0;
}