Cod sursa(job #779292)

Utilizator emiemiEmi Necula emiemi Data 17 august 2012 13:42:14
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int i,n,a,b,m,mij,ls,ld,x,v[100001];
int main()
{f>>n;
for(i=1;i<=n;++i)
	f>>v[i];
f>>m;
for(i=1;i<=m;++i)
{f>>b>>a;
if(b==0)
{ls=1; ld=n; x=-1;
mij=ls+(ld-ls)/2;
while(ls<=ld)
{if(a<v[mij])
	ld=mij-1;
else
	if(a>v[mij])
		ls=mij+1;
	else
		if(a==v[mij])
		{x=mij;
		break;
		}
mij=ls+(ld-ls)/2;
}
if(x>=0)
{while(v[x+1]==v[x])
	++x;
g<<x<<'\n';
}}
else
	if(b==1)
	{ls=1; ld=n; x=-1;
	mij=ls+(ld-ls)/2;
	while(ls<=ld)
	{if(a<v[mij])
		ls=mij-1;
	else
		if(a>v[mij])
			ld=mij+1;
		else
			if(a==v[mij])
			{x=mij;
			break;
			}
	mij=ls+(ld-ls)/2;
	}
	if(x>=0)
    {while(v[x+1]==v[x])
		++x;
    g<<x<<'\n';
    }
	else
	{if(v[ls]>x)
	{while(v[ls-1]>=x)
		--ls;
	ls=ls-1;
	g<<ls<<'\n';
	}
	else
	{while(v[ls+1]<=x)
		++ls;
	g<<ls<<'\n';
	}}}
	else
		if(b==2)
		{ls=1; ld=n; x=-1;
	    mij=ls+(ld-ls)/2;
	    while(ls<=ld)
	    {if(a<v[mij])
		    ls=mij-1;
	    else
			if(a>v[mij])
				ld=mij+1;
		    else
				if(a==v[mij])
			    {x=mij;
				break;
			    }
	    mij=ls+(ld-ls)/2;
	    }
	    if(x>=0)
        {while(v[x-1]==v[x])
			--x;
		g<<x<<'\n';
        }
	    else
	    {if(v[ls]>x)
	    {while(v[ls-1]>=x)
			--ls;
	    g<<ls<<'\n';
	    }
	    else
	    {while(v[ls+1]<=x)
			++ls;
		ls=ls+1;
	    g<<ls<<'\n';
	    }}}
}
return 0;
}