Mai intai trebuie sa te autentifici.

Cod sursa(job #1022264)

Utilizator nimeniaPaul Grigoras nimenia Data 5 noiembrie 2013 00:10:11
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <vector>
#include <cstdio>
#include <algorithm>

using namespace std;

int main() {

	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);

	int n, m, x, op;

	vector<int> v;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &x);
		v.push_back(x);
	}

	scanf("%d", &m);

	vector<int>::iterator it;
	for (int i = 0; i < m; i++) {
		scanf("%d %d", &op, &x);
		switch (op) {
		case 0:
			it = upper_bound(v.begin(), v.end(), x);
			if (it == v.end() && *(it - 1) == x)
				printf("%d\n", it - v.begin());
			else if (it == v.end() || *(it - 1) != x)
				printf("-1\n");
			else
				printf("%d\n", it - v.begin());
			break;
		case 1:
			it = upper_bound(v.begin(), v.end(), x);
			printf("%d\n", it - v.begin());
			break;
		case 2:
			it = lower_bound(v.begin(), v.end(), x);
			printf("%d\n", it - v.begin() + 1);
			break;
		}
	}

	return 0;
}