Cod sursa(job #348657)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 16 septembrie 2009 15:44:25
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>

using namespace std;

#define NMAX 100010

#define fin  "cautbin.in"
#define fout "cautbin.out"

int N, M, v[NMAX];

int searchMax(int x)
{
	int lo, hi, mid;

	lo = 1; hi = N;
	while ( lo <= hi )
	{
		mid = lo + (hi-lo)/2;
		if ( v[mid] <= x )
			lo = mid + 1;
		else
			hi = mid - 1;
	}
	
	return lo - 1;
}

int searchMin(int x)
{
	int lo, hi, mid;

	lo = 1; hi = N;
	while ( lo <= hi )
	{
		mid = lo + (hi-lo)/2;
		if ( x <= v[mid] )
			hi = mid - 1;
		else
			lo = mid + 1;
	}

	return hi + 1;
}

int main()
{
	ifstream f1(fin);
	ofstream f2(fout);

	f1 >> N;
	for ( int i = 1; i <= N; ++i )
		f1 >> v[i];
	f1 >> M;
	for ( ; M--; )
	{
		int op, x, posM;

		f1 >> op >> x;
		
		posM = searchMax(x);
		if ( op == 0 )
			if ( v[posM] != x )
				f2 << "-1\n";
			else
				f2 << posM << "\n";;
		if ( op == 1 )
			f2 << posM << "\n";
		if ( op == 2 )
		{
			posM = searchMin(x);
			f2 << posM << "\n";
		}
	}

	return 0;
}