Cod sursa(job #1303437)

Utilizator bogdan.feraruFeraru Bogdan bogdan.feraru Data 27 decembrie 2014 23:24:24
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <fstream>
using namespace std;

#define zeros(x) ( (x ^ (x - 1)) & x )

void Add(int *v,int n, int pos, int quantity)
{
	int i;

	for (i = pos; i <= n; i += zeros(i))
		v[i] += quantity;
}

int Compute(int *v,int pos)
{
	int i, ret = 0;

	for (i = pos; i > 0; i -= zeros(i))
		ret += v[i];
	return ret;
}

int main()
{
	int v[15001], n, m, v1, v2, com, i,st, dr ;
	ifstream ifs("datorii.in");
	ofstream ofs("datorii.out");
	ifs >> n >> m;
	for (i = 0; i <= n; i++) {
		v[i] = 0;
	}
	for (i = 1; i <= n; i++) {
		ifs >> com;
		Add(v, n, i, com);
	}
	for (i = 1; i <= m; i++) {
		ifs >> com >> v1 >> v2;
		if (com == 0) {
			Add(v, n, v1, -v2);
		}
		else {
			st = Compute(v, v1-1);
			dr = Compute(v, v2);
			ofs << dr-st<<endl;
		}
	}
	ifs.close();
	ofs.close();
}