Cod sursa(job #2239113)

Utilizator gabrielxCojocaru Gabriel-Codrin gabrielx Data 9 septembrie 2018 12:25:27
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <unordered_map>
#include <queue>
#include <deque>
#include <cmath>
#include <algorithm>

#define MAX_N 100000

using namespace std;

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

int N, M, qType, num;
vector<int> v(MAX_N);

void solve0() {
	auto it = upper_bound(v.begin(), v.begin() + N, num);

	if (it != v.begin() && *(prev(it)) == num) {
		cout << distance(v.begin(), it) << '\n';
	}
	else {
		cout << -1 << '\n';
	}
}

void solve1() {
	auto it = upper_bound(v.begin(), v.begin() + N, num);
	cout << distance(v.begin(), it) << '\n';
}

void solve2() {
	auto it = lower_bound(v.begin(), v.begin() + N, num);
	cout << distance(v.begin(), it) + 1 << '\n';
}

int main() {
	cin.sync_with_stdio(false);
	cout.sync_with_stdio(false);
	
	cin >> N;
	for (int i = 0; i < N; ++i) {
		cin >> v[i];
	}
	
	cin >> M;
	for (int i = 0; i < M; ++i) {
		cin >> qType >> num;

		switch (qType) {
			case 0:
				solve0();
				break;
			case 1:
				solve1();
				break;
			case 2:
				solve2();
				break;
		}
	}

	return 0;
}