Cod sursa(job #191854)

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

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 + 1) & k;
		}
	}

	for (i = 1; i <= m; ++i) {
		fscanf(f1, "%d%d%d", &x, &y, &z);
		if (x) {	//suma
			k = y - 1;
			s1 = s2 = 0;
			while (k > 0) {
				s1 += aib[k];
				k = ((~k + 1) & k) ^ k;
			}
			k = z;
			while (k > 0) {
				s2 += aib[k];
				k = ((~k + 1) & k) ^ k;
			}
			fprintf(f2, "%d\n", s2 - s1);
		}
		else {		//achitare
			k = y;
			while (k <= n) {
				aib[k] -= z;
				k += (~k + 1) & k;
			}
		}
	}

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