Cod sursa(job #485532)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 18 septembrie 2010 17:41:42
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<stdio.h>

const int NMAX = 15001;

int N, M, A[NMAX];

int lsb(int i) {
	return i ^ (i & (i - 1));
}

void update(int semn, int poz, int val) {
	int i;
	for(i=poz; i<=N; i+=lsb(i))
		A[i]+=(val*semn);
}

int query(int poz) {
	int sum=0, i;
	for(i=poz; i>0; i-=lsb(i))
		sum+=A[i];
	return sum;
}

int main() {
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	
	int i, val, st, dr, tip, poz;
	
	scanf("%d %d",&N,&M);
	for(i=1; i<=N; i++) {
		scanf("%d",&val);
		update(1,i,val);
	}
	
	for(; M; --M) {
		scanf("%d",&tip);
		if(tip==0) {
			scanf("%d %d",&poz,&val);
			update(-1,poz,val);
		}
		else {
			scanf("%d %d",&st,&dr);
			printf("%d\n",query(dr)-query(st-1));
		}
	}
	
	return 0;
}