Cod sursa(job #1698800)

Utilizator ArkinyStoica Alex Arkiny Data 5 mai 2016 13:32:17
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
#include<vector>
using namespace std;

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

int aib[100010], N, Q;

void update(int x, int e)
{
	for (;x <= N;x += x&(-x))
		aib[x] += e;
}

int query(int x)
{
	int s = 0;
	for (;x;x -= x&(-x))
		s += aib[x];
	return s;
}


int main()
{
	in >> N >> Q;

	for (int i = 1;i <= N;++i)
	{
		int e;
		in >> e;
		update(i, e);
	}

	for (int i = 1;i <= Q;++i)
	{
		int o,x, y;
		in >> o;

		if (o == 0)
		{
			in >> x >> y;
			update(x, y);
		}
		else if (o == 1)
		{
			in >> x >> y;
			out << query(y) - query(x - 1)<<'\n';
		}
		else
		{
			in >> x;

			int l = 1, r = N, mid, p =-1, s;

			while (l <= r)
			{
				mid = (l + r) / 2;
				s = query(mid);
				if (s < x)
					l = mid + 1;
				else if (s >= x)
				{
					if (s == x)
						p = mid;
					r = mid - 1;
				}
			}

			out << p<<'\n';

		}

	}

	return 0;


}