Cod sursa(job #1043338)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 28 noiembrie 2013 13:52:17
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 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 querry(int nod,int st,int dr) {
	if(a<=st && b>=dr){
		suma+=arb[nod];
	}
	else {
		int mid=st+(dr-st)/2;
		
		if(a<=mid)
			querry(2*nod,st,mid);
		if(b>mid)
			querry(2*nod+1,mid+1,dr);
	}
}
void update(int nod,int st,int dr,int op) {
	
	if(st==dr) {
		if(op==1)
			arb[nod]-=val;
		else
			arb[nod]=val;
	}
	else {
		int mid=st+(dr-st)/2;
		
		if(pos<=mid){
			update(2*nod,st,mid,op);
			
		}
		else{
			update(2*nod+1,mid+1,dr,op);
		}
		arb[nod]=arb[2*nod]+arb[2*nod+1];
	}
	
}
int main () {
	
	f>>n>>m;
	
	for(i=1;i<=n;++i) {
		f>>v[i];
		val=v[i];
		pos=i;
		update(1,1,n,0);
	}
	
	for(i=1;i<=m;++i){
		f>>op>>a>>b;
		if(!op){
            pos=a;
            val=b;
            update(1,1,n,1);
        }
        else{
            suma=0;
            querry(1,1,n);
            g<<suma<<"\n";
        }
	}
	return 0;
}