Cod sursa(job #2340481)

Utilizator dahaandreiDaha Andrei Codrin dahaandrei Data 10 februarie 2019 15:08:31
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>

using namespace std;

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

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

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

int cb(int nr) {
	int ret = 0;
	int add = 1 << 16;
	while (add) {
		if (ret + add <= n && v[ret + add] < nr) ret += add;
		add >>= 1;
	}

	return ret;
}

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

	in >> m;
	int t, x, ans;
	for (int i = 1; i <= m; ++ i) {
		in >> t >> x;
		if (t == 0) {
			ans = cb(x + 1);
			if (ans == 0 || v[ans] != x) out << -1 << '\n';
			else out << ans << '\n';
		}
		if (t == 1) {
			ans = cb(x + 1);
			out << ans << '\n';
		}
		if (t == 2) {
			ans = cb(x);
			++ ans;
			out << ans << '\n';
		}
	}


	return 0;
}