Cod sursa(job #2410064)

Utilizator LucaSeriSeritan Luca LucaSeri Data 19 aprilie 2019 18:10:30
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;


int bs(int x, vector< int > &v) {
	int best = 0;
	for(int step = 20; step >= 0; --step) {
		if(best+(1<<step) < v.size() && v[best+(1<<step)] <= x) best += (1<<step);
	}

	return best;
}
int main() {
	#ifdef BLAT
		freopen("input", "r", stdin);
	#else
		freopen("cautbin.in", "r", stdin);
		freopen("cautbin.out", "w", stdout);
	#endif

	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	int n;
	cin >> n;

	vector< int > v(n + 1);
	for(int i = 1; i <= n; ++i) cin >> v[i];


	int m;
	cin >> m;

	for(int i = 0; i < m; ++i) {
		int t, x;
		cin >> t >> x;
		if(t == 0) {
			int k = bs(x, v);
			if(v[k] == x) cout << k << '\n';
			else cout << "-1\n";
		}
		if(t == 1) {
			cout << bs(x, v) << '\n';
		}
		if(t == 2) {
			cout << bs(x-1, v) + 1 << '\n';
		}
		
	} 
	return 0;
}