Cod sursa(job #196567)

Utilizator plastikDan George Filimon plastik Data 27 iunie 2008 11:24:02
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
// http://infoarena.ro/problema/cautbin

#include <fstream>

#include <vector>

using namespace std;

int n, m;
vector<int> A;

int binarySearch(int type, int what) {
	int lo, hi, mid;
	int Ans[3];
	Ans[0] = Ans[1] = Ans[2] = -1;

	for (lo = 0, hi = n - 1; lo <= hi; ) {
		mid = lo + (hi - lo) / 2;

		if (A[mid] < what) {
			Ans[1] = mid;
			lo = mid + 1;
		} else if (A[mid] > what) {
			Ans[2] = mid;
			hi = mid - 1;
		} else {
			Ans[0] = Ans[1]= Ans[2] = mid;
			break;
		}
	}

	return Ans[type];
}

int main() {

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

	in >> n;
	A.reserve(n);
	int i, e;
	for (i = 0; i < n; ++ i) {
		in >> e;
		A.push_back(e);
	}

	int type, what, ans;
	in >> m;
	for (i =  0; i < m; ++ i) {
		in >> type >> what;
		ans = binarySearch(A, type, what);
		if (ans == -1)
			out << "-1\n";
		else
			out << ans + 1 << endl;
	}

	return 0;
}