Cod sursa(job #2287265)

Utilizator marcudanfDaniel Marcu marcudanf Data 21 noiembrie 2018 18:27:01
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>

using namespace std;

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

const int N=15000+5;

int n,q;
int ret[N+N+N];

inline void upd(int nod,int st,int dr,int p,int x){
	if(dr<p || p<st)
		return;
	if(st==dr){
		ret[nod]-=x;
		return;
	}
	int med=(st+dr)/2;
	upd(2*nod,st,med,p,x);
	upd(2*nod+1,med+1,dr,p,x);
	ret[nod]=ret[2*nod]+ret[2*nod+1];
}

inline int ask(int nod,int st,int dr,int x,int y){
	if(dr<x || y<st)
		return 0;
	if(x<=st && dr<=y)
		return ret[nod];
	int med=(st+dr)/2;
	return ask(2*nod,st,med,x,y)+ask(2*nod+1,med+1,dr,x,y);
}

int main(){
	fin>>n>>q;
	for(int i=1;i<=n;i++){
		int x;
		fin>>x;
		upd(1,1,n,i,x);
	}
	for(int tc=1;tc<=q;tc++){
		int t,a,b;
		fin>>t>>a>>b;
		if(t==0)
			upd(1,1,n,a,-b);
		else
			fout<<-ask(1,1,n,a,b)<<"\n";
	}
	return 0;
}