Cod sursa(job #1446662)

Utilizator GrandmasterSoucup Bogdan Grandmaster Data 2 iunie 2015 15:52:21
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int x[1500005], n, m, vac = 0, y[150004];
void add(int poz, int nod, int st, int dr, int val)
{
	if(st == dr)
	{
		x[nod] = val;
		return ;
	}
	int m = (st + dr) / 2;
	if(m >= poz)
		add(poz, nod * 2, st, m, val);
	else
		add(poz, nod * 2 + 1, m + 1, dr, val);
	x[nod] = x[nod * 2] + x[nod * 2 + 1];
}
void sum(int nod, int a, int b, int st, int dr)
{
	if(a <= st && dr <= b)
	{
		vac += x[nod];
		return ;
	}
	int m = (st + dr) / 2;
	if(a <= m)
		sum(nod * 2, a, b, st, m);
	if(b > m)
		sum(nod * 2 + 1, a, b, m + 1, dr);
}
int main()
{
	int n, m, a, ind;
	cin >> n >> m;
	for(int i = 1; i <= n; i++)
	{
		cin >> a;
		y[i] = a;
		add(i, 1, 1, n, a);
	}
	for(int i = 0; i < m; i++)
	{
		cin >> ind;
		if(ind == 1){
			int aa, bb;
			cin >> aa >> bb;
			vac = 0;
			sum(1, aa, bb, 1, n);
			cout << vac << "\n";
		}
		else
		{
			int t, v;
			cin >> t >> v;
			add(t, 1, 1, n, y[t] - v);
		}
	}
}