Cod sursa(job #191857)

Utilizator Omega91Nicodei Eduard Omega91 Data 29 mai 2008 11:15:33
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>
using namespace std;


void change(int poz, int maxpoz, int val, int array[])
{
	while (poz <= maxpoz) {
		array[poz] += val;
		poz += -poz & poz;
	}
}

int sum(int poz, int array[])
{
	int s;
	s = 0;
	while (poz > 0) {
		s += array[poz];
		poz = (-poz & poz) ^ poz;
	}
	return s;
}

int main()
{
	int aib[15001] = {}, n, m, x, y, z, s1, s2, k, i;
	FILE *f1, *f2;
	f1 = fopen("datorii.in", "r");
	f2 = fopen("datorii.out", "w");
	fscanf(f1, "%d%d", &n, &m);
	for (i = 1; i <= n; ++i) {
		fscanf(f1, "%d", &x);
		k = i;
		while (k <= n) {
			aib[k] += x;
			k += -k & k;
		}

	}

	for (i = 1; i <= m; ++i) {
		fscanf(f1, "%d%d%d", &x, &y, &z);
		if (x)	//suma
			fprintf(f2, "%d\n", sum(z, aib) - sum(y - 1, aib));
		else		//achitare
			change(y, n, -z, aib);
	}

	fclose(f1);
	fclose(f2);
	return 0;
}