Cod sursa(job #989316)

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

using namespace std;

#define NMAX 15010

int tree[NMAX];
int step[NMAX];

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

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

int main(){

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

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

	for (int i=0; i<=n; i++){
		tree[i] = 0;
		step[i] = i & -i;
	}

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

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

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

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

	return 0;
}