Cod sursa(job #387001)

Utilizator BaduBadu Badu Badu Data 26 ianuarie 2010 16:52:11
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include<stdio.h>

FILE *f= fopen("cautbin.in","r");
FILE *g= fopen("cautbin.out","w");

int n,m;
int v[100001];

int main(){
	
		int b,o,x,i;
	
	
	fscanf(f,"%d",&n);
	
	int log;for(log=1;log<n; log<<=1); log>>=1;
	
	for(i=1;i<=n;i++) fscanf(f,"%d",&v[i]);
	
	fscanf(f,"%d",&m);

	
	for( ; m ; --m ){
		
			fscanf(f,"%d %d",&o,&x);

			if( o < 2 ){
				
				for( i=0, b=log;b ; b>>=1 )
					if( i+b <= n && v[i+b] <= x ) i+=b;
				
			if( v[i]!=x && !o  ) fprintf(g,"-1\n");
			else fprintf(g,"%d\n",i);
			
			}else {
				for( i=n,b=log; b ; b>>=1  )
					if( i - b && v[i-b] >= x ){ i-=b;
				fprintf(g,"%d\n",i);
				
			}
					
			}
	}
	
	return 0;
}