Cod sursa(job #499713)

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