Cod sursa(job #563746)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 25 martie 2011 21:51:20
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
# include <fstream>
using namespace std;
ifstream f ("aib.in");
ofstream g ("aib.out");
int a[100005],x,i,n,m,q,w;

 void adauga (int i,int x)
 {
	 
	  while (i<=n)
	 {
	 a[i]+=x;
	 i+=(i^(i-1))&i;
	 }
 }

 int sum (int i)
 {
	
	int s=0;
	  while (i>0)
	 {
	 s+=a[i];
	 i-=(i^(i-1))&i;
	 }
	 return s;
 }
 
 void cauta (int i,int j)
 {
	 int x;
	 while (i<=j)
	 {
		 w=(i+j)/2;
		 x=sum (w);
		 
		 if (x==q)
			 break;
		 else
			 if (q<x)
				 j=w-1;
			 else
				 i=w+1;
	 }
	 if (j<i)
		 w=-1;
 }
 

int main ()
{
	f>>n>>m;
	for (i=1;i<=n;i++)
	{
		f>>x;
		adauga (i,x);
	}
	
	for (i=1;i<=m;i++)
	{
		f>>x;
		if (x==0)
		{
			f>>q>>w;
			adauga (q,w);
		}
		if (x==1)
		{
			f>>q>>w;
			g<<sum (w)-sum (q-1)<<"\n";
		}
		if (x==2)
		{
			f>>q;
			w=0;
			cauta (1,n);
			g<<w<<"\n";
		}
	}
	return 0;
}