Cod sursa(job #84826)

Utilizator c_sebiSebastian Crisan c_sebi Data 17 septembrie 2007 19:04:49
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <stdio.h>
#define MAX 15001

int a[MAX], n, nr_op;

FILE *f = fopen("datorii.in", "r");
FILE *g = fopen("datorii.out", "w");


void update(int poz, int val){
	a[poz]+=val;
	while((poz+=(poz^(poz-1))&poz) <= n)
		a[poz]+=val;
}

int query(int poz){
	int S = a[poz];
	while((poz-=(poz^(poz-1))&poz) >= 1)
		S+=a[poz];
	return S;
}

int main() {

	int i, v, b, p, q;
	fscanf(f, "%d %d", &n, &nr_op);
	for(i=1; i<=n; ++i){
		fscanf(f, "%d", &v);
		update(i, v);
	}

	for(i=1; i<=nr_op; ++i){
		fscanf(f, "%d %d %d", &b, &p, &q);
		if(!b) update(p, -q);
		else 	fprintf(g, "%d\n", query(q)-query(p-1));
	}

	fclose(f); fclose(g);
	return 0;
}