Cod sursa(job #2213937)

Utilizator dahaandreiDaha Andrei Codrin dahaandrei Data 18 iunie 2018 00:02:52
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int MAXN = 1e5;
const int MAXM = 1e5;

int v[MAXN + 2];
int n, m;

int binary_search(int nr) {
	int add = (1 << 20);
	int cur = 0;
	while (add) {
		if (cur + add <= n && v[cur + add] <= nr) cur += add;
		add >>= 1;
	}
	return cur;
}

int main() {
	in >> n;

	for (int i = 1; i <= n; ++ i) {
		in >> v[i];
	}
	sort(v + 1, v + n + 1);

	in >> m;

	int q, nr;
	for (int i = 1; i <= m; ++ i) {
		in >> q >> nr;

		int find;
		if (q == 0) {
			find = binary_search(nr);
			if(v[find] == nr)
				out << find << '\n';
			else
				out << -1 << '\n';
		}

		if (q == 1) {
			find = binary_search(nr);
			out << find << '\n';
		}

		if (q == 2) {
			find = binary_search(nr - 1);
			out << find + 1 << '\n';
		}
	}

	return 0;
}