Cod sursa(job #828985)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 4 decembrie 2012 18:55:28
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
using namespace std;

int n, m, arb[32768], a, b;

void bagaMare(int nod, int stg, int dpt)
{
	if (stg == dpt)
	{
		arb[nod] += b;
		return;
	}
	
	int mij = (stg+dpt)>>1, fiu = nod<<1;
	if (a <= mij) bagaMare(fiu, stg, mij);
	else bagaMare(fiu+1, mij+1, dpt);
	
	arb[nod] = arb[fiu] + arb[fiu+1];
}

int spuneCaTeTai(int nod, int stg, int dpt)
{
	if (a <= stg && dpt <= b)
	{
		return arb[nod];
	}
	
	int s = 0, mij = (stg+dpt)>>1, fiu = nod<<1;
	if (a <= mij)
		s += spuneCaTeTai(fiu, stg, mij);
	if (mij < b)
		s += spuneCaTeTai(fiu+1, mij+1, dpt);
	return s;
}

int main()
{
	freopen("datorii.in", "r", stdin);
	freopen("datorii.out", "w", stdout);
	int i, c;
	
	scanf("%d%d", &n, &m);
	for (i=1;i<=n;++i)
	{
		scanf("%d", &b);
		a = i;
		bagaMare(1, 1, n);
	}
	
	for (i=1;i<=m;++i)
	{
		scanf("%d%d%d", &c, &a, &b);
		if (!c)
		{
			b *= -1;
			bagaMare(1, 1, n);
		}
		else printf("%d\n", spuneCaTeTai(1, 1, n));
	}
	return 0;
}