Cod sursa(job #1473270)

Utilizator mateidanutDanut Gabriel Matei mateidanut Data 18 august 2015 22:28:47
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#define NMAX 100000
using namespace std;

int v[NMAX+1], n, m, op, a, b;

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

void Update(int i, int x)
{	while (i<=n)
	{	v[i]+=x;
		i+=(i&-i);
	}
}

int Sum(int i)
{	int s=0;
	while (i)
	{	s+=v[i];
		i=i&(i-1);
	}
	return s;
}

int BinSearch(int x)
{	int incr=1;
	while (incr<=n)
		incr<<=1;
	int poz=0;
	while (incr)
	{	if (incr+poz<=n)
		{	if (v[incr+poz]<=x)
			{	x-=v[incr];
				poz+=incr;
				if (x==0)
					return poz;
			}
		}
		incr>>=1;
	}
	return -1;
}

int main()
{	f>>n>>m;
	int i;
	for (i=1; i<=n; ++i)
	{	int x;
		f>>x;
		Update(i, x);
	}
	for (; m; --m)
	{	f>>op;
		if (op==0)
		{	f>>a>>b;
			Update(a, b);
		}
		else
		{	if (op==1)
			{	f>>a>>b;
				g<<Sum(b)-Sum(a-1)<<'\n';
			}
			else
			{	f>>a;
				g<<BinSearch(a)<<'\n';
			}
		}
	}
    return 0;
}