Cod sursa(job #196570)

Utilizator plastikDan George Filimon plastik Data 27 iunie 2008 11:29:31
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
// http://infoarena.ro/problema/cautbin

#include <fstream>

#include <vector>

using namespace std;

const int NMAX = 100005;

int n, m;
int A[NMAX], Ans[3];

int binarySearch(int type, int what) {
	int lo, hi, mid;
	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;
	int i;
	for (i = 0; i < n; ++ i)
		in >> A[i];

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

	return 0;
}