Cod sursa(job #989299)

Utilizator meehighStancu Mihai meehigh Data 25 august 2013 14:29:36
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <fstream>

using namespace std;

#define NMAX 15000

void update(int idx, int n, int val, int tree[]){
	while (idx <= n){
		tree[idx] += val;
		idx += (idx & -idx);
	}
}

int read(int idx, int tree[]){
	int sum = 0;
	while (idx > 0){
		sum += tree[idx];
		idx -= (idx & -idx);
	}
	return sum;
}

int main(){

	ifstream fin("datorii.in");
	ofstream fout("datorii.out");

	int n,m,a;
	fin >> n >> m;

	int tree[NMAX];

	for (int i=0; i<=n; i++)
		tree[i] = 0;

	for (int i=0; i<n; i++){
		fin >> a;
		update(i+1,n,a,tree);
	}
		
	int o,t,v,p,q,s;

	for (int i=0; i<m; i++){
		fin >> o;

		if (o==0){
			fin >> t >> v;
			update(t,n,-v,tree);
		}
		else {
			fin >> p >> q;
			s = read(q,tree) - read(p-1,tree);
			fout << s << endl;
		}
	}

	fin.close();
	fout.close();

	return 0;
}