Cod sursa(job #394748)

Utilizator toniobFMI - Barbalau Antonio toniob Data 11 februarie 2010 15:14:55
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
using namespace std;
#define NMax 100006

ifstream in ( "cautbin.in" );
ofstream out ( "cautbin.out" );

int N, v [ NMax ], M, k;

int main ()
{
	int t, i, x, K;
	
	in >> N;
	for ( int i = 1; i <= N; ++i )
		in >> v [ i ];
	
	for ( k = 1; k <= N; k <<= 1 );
	
	in >> M;
	for ( ; M; --M )
	{
		in >> t >> x;
		if ( t < 2 )
		{
			for ( K = k, i = 0; K; K >>= 1 )
				if ( i + K <= N && v [ i + K ] <= x )
					i += K;
			
			if ( !t && v [ i ] != x )
				out << "-1\n";
			else
				out << i << "\n";
			
			continue;
		}
		
		for ( K = k, i = N; K; K >>= 1 )
			if ( i - K > 0 && v [ i - K ] >= x )
				i -= K;
		
		out << i << "\n";
	}
	
	return 0;
}