Cod sursa(job #763217)

Utilizator harababurelPuscas Sergiu harababurel Data 1 iulie 2012 14:23:22
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <fstream>
using namespace std;

int n, m, aib[15005];

void add(int poz, int val) {
	int i=poz;
	while(i<=n) {
		aib[i]+=val;
		i+= (i & -i);
	}
}

void rmv(int poz, int val) {
	int i=poz;
	while(i<=n) {
		aib[i]-=val;
		i+= (i & -i);
	}
}


int compute(int poz) {
	int rez=0, i;
	i=poz;
	while(i>0) {
		rez+=aib[i];
		i -= (i & -i);
	}
	return rez;
}
	

int main() {
	
	ifstream f("datorii.in");
	ofstream g("datorii.out");
	
	int i, j, op, a, b;
	
	f>>n>>m;
	for(i=1; i<=n; i++) aib[i]=0;
	for(i=1; i<=n; i++) {
		f>>j;
		add(i, j); 	//pe poz. i se pune valoarea j
	}
	
	for(int t = 1; t<=m; t++) {
		f>>op>>a>>b;
		
		if(op==0) {		//s-a achitat plata -> trebuie scazut din arbore
			rmv(a,b);
		}
		else {
			g<<compute(b)-compute(a-1)<<"\n";
		}
	}
		

	f.close();
	g.close();
	return 0;
}