Cod sursa(job #499944)

Utilizator alexm456alexandru maican alexm456 Data 11 noiembrie 2010 08:55:00
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<stdio.h>
long x[101],N;
long bsd (long val)
	{
	long st,dr,med,last=-1;
	st=1; dr=N;
	while (st<=dr)
		{
		med=st+(dr-st)/2;
		if (x[med]<=val)
			{
			last=med;
			st=med+1;
			}
		else dr=med-1;
		}
	return last;
	}
long bs3 (long val)
	{
	long st,dr,med,first=-1;
	st=1; dr=N;
	while (st<=dr)
		{
		med=st+(dr-st)/2;
		if (val<=x[med])
			{
			dr=med-1;
			first=med;
			}
		else st=med+1;
		}
	return first;
	}


int main()
{
freopen("cautbin.txt","r",stdin);
freopen("cautbin.out","w",stdout);
long M,i,a,n,rez;
scanf ("%d",&N);
for (i=1;i<=N;i++)
	scanf("%d",&x[i]);
scanf ("%d",&M);
for (i=1;i<=M;i++)
	{
	scanf("%d%d",&a,&n);
	rez=bsd(n);
   switch (a)
   	{
      case 0:
      	if (x[rez]!=n) printf("-1\n");
				else  printf("%d\n",rez);
      	break;
      case 1:
      	printf ("%d\n",rez);
      	break;
      default:
      	printf("%d\n",bs3(n));
      	break;
      }
   }
return 0;
}