Cod sursa(job #199373)

Utilizator GagosGagos Radu Vasile Gagos Data 18 iulie 2008 14:18:42
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<stdio.h>
long n,*a,m,x,y;
long cb1(long val)  
{
	long i,zero;  
	for(zero=1;zero<n;zero<<=1);  
	for(i=0;zero;zero>>=1)  
        	if(i+zero<n && a[i+zero]<=val)  
           		i+=zero;
	return i;
}
long cb2(long val)  
{
	long i,zero;  
	for(zero=1;zero<n;zero<<=1);  
	for(i=n;zero;zero>>=1)  
        	if(i-zero>0 && a[i-zero]<=val)  
           		i-=zero;
	return i;
}
int main()
{
	int i;
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	scanf("%ld",&n);
	a=new int[n];
	for(i=1;i<=n;++i)
		scanf("%ld",&a[i]);
	scanf("%ld",&m);
	for(;m;--m){
		scanf("%ld %ld",&x,&y);
		if(x==0)
			if(a[cb1(y)]==y){
				printf("%ld\n",cb1(y));
				continue;
			}
			else{
				printf("-1\n");
				continue;
			}
		if(x==1){
			printf("%ld\n",cb1(y));
			continue;
		}
		if(x==2){
			printf("%ld\n",cb2(y));
			continue;
		}
	}
	fcloseall();
	return 0;
}