Cod sursa(job #679199)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 12 februarie 2012 21:26:41
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
#define lim 15002
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int v[lim],n,m,i,arb[3*lim],val,pos,a,b,op,suma,o;
void update(int nod,int st,int dr,int o){
	if(st==dr){
		if(!o)
			arb[nod]=val;
		else
			arb[nod]-=val;
	}
	else{
		int mij=(st+dr)/2;
		if(pos<=mij)
			update(2*nod,st,mij,o);
		else
			update(2*nod+1,mij+1,dr,o);
	    arb[nod]=arb[2*nod]+arb[2*nod+1];
	}
}
void query(int nod,int st,int dr){
	if(a<=st && b>=dr){
		suma+=arb[nod];
	}
	else{
		int mij=(st+dr)/2;
		if(a<=mij)
			query(2*nod,st,mij);
		if(b>mij)
			query(2*nod+1,mij+1,dr);
	}
}
int main (){
	f>>n>>m;
	o=0;
	for(i=1;i<=n;i++){
		f>>v[i];
		pos=i;
		val=v[i];
		update(1,1,n,o);
	}
	o=1;
	for(;m;m--){
		f>>op>>a>>b;
		if(!op){
			pos=a;
			val=b;
			update(1,1,n,o);
		}
		else{
			suma=0;
			query(1,1,n);
			g<<suma<<"\n";
		}
	}
	return 0;
}