Cod sursa(job #1956389)

Utilizator ButmalaiDanButmalai Dan ButmalaiDan Data 6 aprilie 2017 18:32:03
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<bits/stdc++.h>
using namespace std;
int arb[40100],n,m,i,x,t;
void update(int st, int dr, int nod, bool u)
{
	if(st == dr) 
	{
		arb[nod] += (u? -x:x);
		return;	
	}
	int mid = (st + dr)/2;
	if (i <= mid) update(st,mid,nod*2,u);
	else update(mid+1,dr,nod*2+1,u);
	arb[nod] = arb[nod*2+1] + arb[2*nod];
}
int query(int st,int dr, int a, int b, int nod)
{
	if(a <= st && dr <= b)
	{
		return arb[nod];
	}
	int ret = 0,ret1 = 0, mid = (st + dr)/2;
	if(a <= mid) ret = query(st,mid,a,b,nod*2);
	if(b > mid) ret1 = query(mid+1,dr,a,b,nod*2+1);
	return ret+ret1; 

}
int main()
{
	ifstream cin("datorii.in");
	ofstream cout("datorii.out");
	cin >> n >> m;
	for (i = 1; i <= n; i++)
	{
		cin >> x;
		update(1, n, 1, 0);
	}
	while(m--)
	{
		cin >> t >> i >> x;
		if (!t)
		{
			update(1,n,1,1);			
		}else	{
			cout << query(1,n,i,x,1) << "\n";
		}
	}
}