Cod sursa(job #3320357)

Utilizator mrvalentynTime Limit Exceeded mrvalentyn Data 5 noiembrie 2025 12:34:02
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
using namespace std;
int di[4]={0,0,-1,1};
int dj[4]={-1,1,0,0};
#define da "YES"
#define nu "NO"
#define nmax 15001
int aint[4*nmax];
int v[nmax];


void build(int nod, int st, int dr){
	if(st==dr)aint[nod]=v[st];
	else{
		int mid=(st+dr)/2;
		build(nod*2,st,mid);
		build(nod*2+1,mid+1,dr);
		aint[nod]=(aint[2*nod] + aint[2*nod+1]);
		
	}
}
void update(int nod ,int st, int dr, int pos, int x){
	if(st==dr)aint[nod]-=x;
	else{
		int mid=(st+dr)/2;
		if(pos<=mid)update(2*nod,st,mid,pos,x);
		else update(2*nod+1,mid+1,dr,pos,x);
		
		aint[nod]=(aint[2*nod] + aint[2*nod+1]);
	}	
}

int query(int nod, int st, int dr, int qst, int qdr){
	if(qst<=st && dr<=qdr)return aint[nod];
	
	else{
		
		int mid=(st+dr)/2;
		
		if(qdr<=mid)return query(2*nod,st,mid,qst,qdr);
		if(mid+1<=qst)return query(2*nod+1,mid+1,dr,qst,qdr);
		return query(2*nod, st, mid, qst, qdr) + query(2*nod+1, mid+1, dr, qst, qdr);	
	}
	
}

int main(){
	#define f cin
	#define g cout
	#define close f.close(); g.close()
	ifstream f("datorii.in");
	ofstream g("datorii.out");
	
	
	
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;++i){
		cin>>v[i];
	}
	build(1,1,n);
	for(int i=1;i<=m;++i){
		int op,a,b;
		cin>>op>>a>>b;
		if(op==0)update(1,1,n,a,b);
		else cout<<query(1,1,n,a,b)<<'\n';
		
	}
	
	close;
	return 0;
	
	
}