Cod sursa(job #1091951)

Utilizator NicuCJNicu B. NicuCJ Data 26 ianuarie 2014 12:42:11
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
using namespace std;

int arbint[60055], s, n, m, i, a, b, c;
void update(int st, int dr, int poz, int val, int niv)
{
	if(st==dr)
	{
		arbint[niv]+=val;
		return;
	}
	int mij;
	mij=(st+dr)/2;
	if(poz<=mij)
		update(st, mij, poz, val, 2*niv);
	if(poz>mij)
		update(mij+1, dr, poz, val, 2*niv+1);
	arbint[niv]=arbint[2*niv]+arbint[2*niv+1];
}

void query(int st, int dr, int sti, int dri, int niv)
{
	if(sti<=st && dr<=dri)
	{
		s=s+arbint[niv];
		return;
	}
	int mij;
	mij=(st+dr)/2;
	if(sti<=mij)
		query(st, mij, sti, dri, 2*niv);
	if(dri>mij)
		query(mij+1, dr, sti, dri, 2*niv+1);
}

int main()
{
	ifstream f("datorii.in");
	ofstream g("datorii.out");
	f>>n>>m;
	for(i=1; i<=n; i++)
	{
		f>>a;
		update(1, n, i, a, 1);
	}
	for(i=1; i<=m; i++)
	{
		f>>a>>b>>c;
		if(a==0)
		{
			update(1, n, b, -c, 1);
		}
		if(a==1)
		{
			s=0;
			query(1, n, b, c, 1);
			g<<s<<"\n";
		}
	}
}