Cod sursa(job #499692)

Utilizator LAM_LAMTRAN BACH LAM LAM_LAM Data 10 noiembrie 2010 17:43:49
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<stdio.h>
long f[100001];
long a,b,i,k,n;
long bs1(long b)
{
		long st=1,dr=n,last=0,med;
		while(st<=dr)
			{
				med=(st+dr)/2;
				if(f[med]==b)
					{
					last=med;	
					st=med+1;
					}
				else
					dr=med-1;
			}
		if(last==0)
			return -1;
		else	
			return last;
}



long bs2(long b)
{
		long st=1,dr=n,last,med;
		while(st<=dr)
			{
				med=(st+dr)/2;
				if(f[med]==b)
					{
					last=med;	
					st=med+1;
					}
				else
					dr=med-1;
			}
		return last;
}



long bs3(long b)
{
		long st=1,dr=n,last,med;
		while(st<=dr)
			{
				med=(st+dr)/2;
				if(f[med]>=b)
					{
					last=med;	
					dr=med-1;
					}
				else
					st=med+1;
			}
		return last;
}




int main()
{
		freopen("cautbin.in","r",stdin);
		freopen("cautbin.out","w",stdout);
		scanf("%ld",&n);
		for(i=1;i<=n;++i)
			scanf("%ld",&f[i]);
		scanf("%ld",&k);
		for(i=1;i<=k;++i)
			{
			scanf("%ld%ld",&a,&b);
			if(a==0)
				printf("%ld\n",bs1(b));
			else
				if(a==1)
					printf("%ld\n",bs2(b));
				else
					printf("%ld\n",bs3(b));
			}
		return 0;
}