Cod sursa(job #782952)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 31 august 2012 16:01:41
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>
long n,x[100002],y,m,poz;
int cb(long val)
{
	int st,dr,med,last=-1;
	st=1;
	dr=n;
	while (st<=dr)
	{
		med=(st+dr)/2;
		if (val>=x[med])
		{
			last=med;
			st=med+1;
		}
		else
			dr=med-1;
	}
	return last;
}
int cb2(long val)
{
	int st,dr,med,last=-1;
	st=1;
	dr=n;
	while (st<=dr)
	{
		med=(st+dr)/2;
		if (val<=x[med])
		{
			last=med;
			dr=med-1;
		}
		else
			st=med+1;
	}
	return last;
}
int main()
{
    long tip,i;
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	scanf("%ld",&n);
	for (i=1;i<=n;i++)
		scanf("%ld",&x[i]);
	scanf("%ld",&m);
	for (i=1;i<=m;i++)
	{
		scanf("%ld%ld",&tip,&y);
		poz=cb(y);
		if (tip==0)
          if(x[poz]==y)
			printf("%ld\n",poz);
		  else
			printf("-1\n");
		if (tip==1)
			printf("%ld\n",poz);
		if (tip==2)
			printf("%ld\n",cb2(y));
	}
}