Cod sursa(job #1355539)

Utilizator mateidanutDanut Gabriel Matei mateidanut Data 22 februarie 2015 20:25:21
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int v[32768], i, n, m, s, d, x, poz, k, sum;

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

void Querry(int nod, int st, int dr)
{	if (s<=st && dr<=d) sum+=v[nod];
	else
	{	int m=(st+dr)/2;
		if (s<=m) Querry(2*nod, st, m);
		if (d>m) Querry(2*nod+1, m+1, dr);
	}
}

int main()
{	f>>n>>m;
	for (i=1; i<=n; ++i)
	{	f>>x;
		poz=i;
		Update(1, 1, n);
	}
	for (i=1; i<=m; ++i)
	{	f>>k;
		if (k==0)
		{	f>>poz>>x;
			x=-x;
			Update(1, 1, n);
		}
		else
		{	f>>s>>d;
			sum=0;
			Querry(1, 1, n);
			g<<sum<<'\n';
		}
	}
    return 0;
}