Cod sursa(job #470086)

Utilizator S7012MYPetru Trimbitas S7012MY Data 11 iulie 2010 12:44:44
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>
#include <iostream>
using namespace std;
#define DN 100001

int c[DN],n,m;

void actualizare(int ind,int val) {
	int poz=0;//pozitia celui mai nesemnificativ bit cu valoarea 1
	while(ind<=n) {
		c[ind]+=val;
		while(!(ind&1<<poz)) ++poz;
		ind+=1<<poz;
		++poz;
	}
}

int interogare(int dr) {
	int s=0,poz=0;
	while(dr>0) {
		s+=c[dr];
		while(!(dr&1<<poz)) ++poz;
		dr-=1<<poz;
		++poz;
	}
	return s;
}

int main()
{
	int i,val,op,a,b;
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d %d",&n,&m);
	for(i=1; i<=n; i++) {
		scanf("%d",&val);
		actualizare(i,val);
	}
	while(m--) {
		scanf("%d %d %d",&op,&a,&b);
		if(!op) actualizare(a,-b);
		else printf("%d\n",interogare(b)-interogare(a-1));
	}
	return 0;
}