Cod sursa(job #1811039)

Utilizator aelinAnisoara aelin Data 20 noiembrie 2016 19:52:25
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>
using namespace std;

int ind, val, arb[400100], l, r, n, m, b;

void update(int st, int dr, int pos){
	if (st==dr){
		arb[pos]-=val;
		return;
	}
	int mid = (st+dr)/2;
	if (ind <= mid) update(st, mid, pos*2); 
	else update(mid+1, dr, pos*2 +1);
	arb[pos]= arb[pos*2]+ arb[pos*2 +1];
}

int cer(int st, int dr, int pos){
	if (l<=st && dr<=r) return arb[pos];
	int a=0, b=0, mid= (st+dr)/2;
	if (l<=mid) a= cer(st, mid, 2*pos);
	if (r> mid) b= cer(mid+1, dr, 2*pos +1);
	return a+b;
}

int main(){
	ifstream cin("datorii.in");
	ofstream cout("datorii.out");
	
	cin>>n>>m;
	
	for (int i=1; i<=n; i++){
		cin>>val;
		ind=i;
		update(1, n, 1);
	}
	for (int i=0; i<m; i++){
		cin>>b;
		if(b){
			cin>>l>>r;
			cout<<- cer(1, n, 1)<<'\n';
		} else {
			cin>>ind>>val;
			update(1, n, 1);
		}
	}
	return 0;
}