Cod sursa(job #812143)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 13 noiembrie 2012 15:46:05
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<stdio.h>
int main()
{
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	int n,ma,i,t,st,dr,y,p,j,m;
	scanf("%d",&n);
	int v[n+5];
	for(i=1;i<=n;i++)
		scanf("%d",&v[i]);
	scanf("%d",&ma);
	for(i=1;i<=ma;i++)
	{
		scanf("%d%d",&t,&y);
		p=-1;
		//pt t=0
		if(t==0)
		{
	dr=n;
	st=1;
	while(dr>=st)
	{
	if(v[(dr+st)/2]==y)
	{
		p=(dr+st)/2;
		break;
	}
	else
	if(v[(dr+st)/2]<y)
		st=(dr+st)/2;
	else
		dr=(dr+st)/2;
	}
	for(j=p;j<=dr;j++)
		if(v[j]!=p)
		{
	printf("%d\n",j-1);
	break;
		}
		}
		//pt t=1
		else
			if(t==1)
		{
					p=-1;
	dr=n;
	st=1;
	while(dr>st)
	{
		m=(st+dr)/2;
	if(v[m]<=y)
		st=m+1;
		else
			dr=m;
	}
	p=(st+dr)/2;
	if(v[(st+dr)/2]>y)
		p--;
	printf("%d\n",p);
		}
	//pt t=2
	else
	{
		dr=n;
		st=1;
		while(dr>st)
		{
			m=(st+dr)/2;
			if(v[m]<y)
			st=m+1;
			else
				dr=m;
		}
		m=(st+dr)/2;
		if(v[m]<y)
			m--;
		printf("%d\n",m);
	}
	}
	return 0;
}