Cod sursa(job #769864)

Utilizator shagarthAladin shagarth Data 21 iulie 2012 10:53:33
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
long v[100001],x,i,k,n,m,y;

long caut0(long y,long n)
{
	long li,ls,mj;
	li=1;
	ls=n;

	while(li<=ls)
	{	
		mj=(li+ls)/2;
		
		if(v[mj]<=y)
			li=mj+1;
		else
		ls=mj-1;
	}
	if(v[mj]>y)
		mj--;
	
	
	if(v[mj]==y)
		return mj;
	else
		return -1;


}
long caut1(long y,long n)
{
	long li,ls,mj;
	li=1;
	ls=n;

	while(li<=ls)
	{	
		mj=(li+ls)/2;
		
		if(v[mj]<=y)
			li=mj+1;
		else
		ls=mj-1;
	}
	if(v[mj]>y)
		mj--;
	
	
	if(v[mj]>y)
		mj--;
	return mj;
}
long caut2(long y,long n)
{
	long li,ls,mj;
	li=1;
	ls=n;

	while(li<=ls)
	{	
		mj=(li+ls)/2;
		
		if(v[mj]<y)
			li=mj+1;
		else
		ls=mj-1;
	}
	
	if(v[mj]<y)
		mj++;
	return mj;
}
int main()
{
	f>>n;
	for(i=1;i<=n;i++)
	{
		f>>v[i];
	}
	f>>m;
	while(m>0)
	{
		f>>x>>y;
		switch(x)
		{
		case 0:{g<<caut0(y,n)<<"\n";break;};
		case 1:{g<<caut1(y,n)<<"\n";break;};
		case 2:{g<<caut2(y,n)<<"\n";break;};
		}
		m--;
	}
	f.close();
	g.close();
	return 0;
}