Cod sursa(job #663705)

Utilizator XbyteAvram Florin Xbyte Data 18 ianuarie 2012 20:52:45
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
#include<cstdio>

const int MaxN = 100001;
const char InFile[] = "cautbin.in";
const char OutFile[] = "cautbin.out";

int n,m,v[MaxN];

int main()
{
	freopen( InFile , "r" , stdin );
	freopen( OutFile , "w" , stdout );
	int i,j,tip,x,BiT,bit;
	scanf("%d" , &n );
	for( i = 1 ; i <= n ; i++ )
		scanf("%d" , &v[i] );
	for( BiT = 1 ; BiT <= n ; BiT <<= 1 );
	scanf("%d" , &m );
	for( j = 0 ; j < m ; j++ )
		{
			scanf("%d%d" , &tip , &x );
			if( tip == 0 )
				{
					for( bit = BiT , i = 0 ; bit ; bit >>= 1 )
						if( i+bit <= n && v[i+bit] <= x )
							i += bit;
					if( v[i] == x )
						printf("%d\n" , i );
						else
						printf("-1\n" );
					continue;
				}
			if( tip == 1 )
				{
					for( bit = BiT , i = 0 ; bit ; bit >>= 1 )
						if( i+bit <= n && v[i+bit] <= x )
							i += bit;
					printf("%d\n" , i );
					continue;
				}
			if( tip == 2 )
				{
					for( bit = BiT , i = n ; bit ; bit >>= 1 )
						if( i - bit > 0 && v[i-bit] >= x )
							i -= bit;
					printf("%d\n" , i );
					continue;
				}
		}
	return 0;
}