Cod sursa(job #1053100)

Utilizator vladrochianVlad Rochian vladrochian Data 12 decembrie 2013 10:55:26
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,a[100001];
void add(int pos,int val)
{
	for(int i=pos;i<=n;i+=i&-i)
		a[i]+=val;
}
int query(int pos)
{
	int s=0,i;
	for(i=pos;i>=1;i-=i&-i)
		s+=a[i];
	return s;
}
int bs(int val)
{
	int s=1,e=n,m,sc;
	while(s<=e)
	{
		m=(s+e)>>1;
		sc=query(m);
		if(sc==val)
			return m;
		else if(sc>val)
			e=m-1;
		else s=m+1;
	}
	return -1;
}
int main()
{
	int a,b,c;
	fin>>n>>m;
	for(a=1;a<=n;a++)
	{
		fin>>b;
		add(a,b);
	}
	while(m--)
	{
		fin>>c;
		switch(c)
		{
			case 0:
			fin>>a>>b;
			add(a,b);
			break;
			case 1:
			fin>>a>>b;
			fout<<query(b)-query(a-1)<<"\n";
			break;
			default:
			fin>>a;
			fout<<bs(a)<<"\n";
		}
	}
	return 0;
}