Cod sursa(job #1995275)

Utilizator virtualityBbbbbbbbbbbbbbbbbb virtuality Data 27 iunie 2017 14:48:24
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<bits/stdc++.h>
using namespace std;
const int N=60020;
int a[N], val, pos, r, l, s;
void update(int nod, int st, int dr){
	if(st==dr){
		a[nod]+=val;
		return;
	}
	int m=(st+dr)/2;
	if(pos<=m) update(nod*2, st, m); else update(nod*2+1, m+1, dr);
	a[nod]=a[nod*2]+a[nod*2+1];
}
void query(int nod, int st, int dr){
	if(l <= st && dr <= r){
		s+=a[nod];
		return;
	}
	int m=(st+dr)/2;
	if(m >=l) query(nod*2, st, m);
	if(m < r) query(nod*2+1, m+1, dr);
}
int main(){
	int n, m;
	ifstream f("datorii.in");
	ofstream g("datorii.out");
	f>>n>>m;
	for(int i=1;i<=n;i++){
		pos=i;
		f>>val;
		update(1,1,n);
	}
	int k;
	while(m--){
		f>>k;
		if(k==0){
			f>>pos>>val;
			val=0-val;
			update(1,1,n);
		}else{
			f>>l>>r;
			s=0;
			query(1,1,n);
			g<<s<<'\n';
		}
	}
	return 0;
}