Cod sursa(job #499959)

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

int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
long M,i,a,n,poz;
scanf("%ld",&N);
for (i=1;i<=N;i++)
	scanf("%ld",&v[i]);
scanf("%ld",&M);
for (i=1;i<=M;i++)
	{
	scanf("%ld%ld",&a,&n);

	switch (a)
		{
		case 0:
		{
		poz=bsdr(n);
		if (v[poz]==n)
			printf("%ld\n",poz);
		else printf("-1\n");
		break;
		}
		case 1:
		printf("%ld\n",poz);
		break;
		case 2:
		printf("%ld\n",bsst(n));
		break;
		}
	}
return 0;
}