Cod sursa(job #212534)

Utilizator alex3el_n2oAlex Vladescu alex3el_n2o Data 5 octombrie 2008 19:59:35
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>
int v[100005];
long n;
long caut(int x)
	{
	int li,ls,p=0;
	long mid;
	li=1;
	ls=n;
	mid=(li+ls)/2;
	while (li<=ls&&!p)
		{
		if (v[mid]==x) p=1;
		else
			{
			if (v[mid]>x)
				{
				ls=mid;
				mid=(li+ls)/2;
				}
			else
				{
				li=mid;
				mid=(li+ls)/2;
				}
			}
		}
	if (p) return mid;
	else return -1;
	}
int main()
{
long i,m,x,q;
int j;
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%ld",&n);
for (i=1;i<=n;i++)
	scanf("%d",&v[i]);
scanf("%ld",&m);
for (i=1;i<=m;i++)
	{
	scanf("%d %d",&q,&j);
	x=caut(j);
	if (!q)
		{
		while (v[x]==v[x+1]&&x<n)
			x++;
		printf("%ld\n",x);
		}
	else
	if (q==1)
		{
		while (v[x]<=j&&x<=n)
			x++;
		printf("%ld\n",x-1);
		}
	else
		{
		while (v[x]>=j&&x>=1)
			x--;
		printf("%ld\n",x+1);
		}
	}
return 0;
}