Cod sursa(job #2312024)

Utilizator richard26Francu Richard richard26 Data 4 ianuarie 2019 00:01:43
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;

int arb[100000];
void update(int nod, int st, int dr, int i, int val)
{
	if(st == dr)
	{
		arb[nod] -= val;
		return;
	}
	int mij = (st + dr) / 2;
	if(i <= mij) update(nod * 2, st, mij, i, val);
		else update(nod * 2 + 1, mij + 1, dr, i, val);
	arb[nod] = arb[nod * 2] + arb[nod * 2 + 1];
}

void query(int nod, int st, int dr, int a, int b, int &s)
{
	if(a <= st && b >= dr)
	{
		s = s + arb[nod];
		return;
	}
	int mij = (st + dr) / 2;
	if(a <= mij) query(nod * 2, st, mij, a, b, s);
	if(b > mij) query(nod * 2 + 1, mij + 1, dr, a, b, s);
}

int main()
{	
	ifstream f("datorii.in");
	ofstream g("datorii.out");
	int n, m, i, s, x, y, z;
	f>>n>>m;
	for (i = 1; i <= n; i++)
	{
		f>>x;
		update(1, 1, n, i, -x);
	}

	for (i = 1; i <= m; i++)
	{
		f>>x>>y>>z;
		if (x == 0)
		{
			update(1, 1, n, y, z);

		}else{
			s = 0;
			query(1, 1, n, y, z, s);
			g<<s<<"\n";
		}

	}

	return 0;
}