Cod sursa(job #779294)

Utilizator emiemiEmi Necula emiemi Data 17 august 2012 13:47:38
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 kb
#include<cstdio>
using namespace std;
FILE *f,*g;
int i,n,a,b,m,mij,ls,ld,x,v[100001];
int main()
{f=fopen("cautbin.in","r");
g=fopen("cautbin.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;++i)
	fscanf(f,"%d",&v[i]);
fscanf(f,"%d",&m);
for(i=1;i<=m;++i)
{fscanf(f,"%d%d",&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;
fprintf(g,"%d\n",x);
}}
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;
    fprintf(g,"%d\n",x);
    }
	else
	{if(v[ls]>x)
	{while(v[ls-1]>=x)
		--ls;
	ls=ls-1;
	fprintf(g,"%d\n",ls);
	}
	else
	{while(v[ls+1]<=x)
		++ls;
	fprintf(g,"%d\n",ls);
	}}}
	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;
		fprintf(g,"%d\n",x);
        }
	    else
	    {if(v[ls]>x)
	    {while(v[ls-1]>=x)
			--ls;
	    fprintf(g,"%d\n",ls);
	    }
	    else
	    {while(v[ls+1]<=x)
			++ls;
		ls=ls+1;
	    fprintf(g,"%d\n",ls);
	    }}}
}
return 0;
}