Cod sursa(job #405081)

Utilizator loginLogin Iustin Anca login Data 27 februarie 2010 14:51:17
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
# include <fstream>
using namespace std;
int n, m, v[100000], p, q, x, poz;

void arb (int nod, int st, int dr)
{
	if (st==dr)
	{
		v[nod]=x;
		return;
	}
	int mij=(st+dr)/2;
	if (poz<=mij)arb(2*nod, st, mij);
	else arb(2*nod+1, mij+1, dr);
	v[nod]=v[2*nod]+v[2*nod+1];
}

int caut (int nod, int st, int dr)
{
	if (p<=st && dr<=q)
		return v[nod];
	int rez=0;
	int mij=(st+dr)/2;
	if (p<=mij)rez+=caut(2*nod, st, mij);
	if (mij<q) rez+=caut(2*nod+1, mij+1, dr);
	return rez;
}

void achit (int nod, int st, int dr)
{
	if (st==dr)
	{
		v[nod]-=x;
		return;
	}
	int mij=(st+dr)/2;
	if (poz<=mij)achit(2*nod, st, mij);
	else achit (2*nod+1, mij+1, dr);
	v[nod]=v[2*nod]+v[2*nod+1];
}

int main()
{
	ifstream fin ("datorii.in");
	freopen ("datorii.out", "w", stdout);
	fin>>n>>m;
	for (int i=1;i<=n;i++)
	{
		fin>>x;
		poz=i;
		arb(1, 1, n);
	}
	int k;
	for (;m;--m)
	{
		fin>>k>>p>>q;
		if (k==0)
		{
			x=q;
			poz=p;
			achit(1, 1, n);
		}
		else
			printf("%d\n", caut(1, 1, n));
	}
	return 0;
}