Cod sursa(job #1446085)

Utilizator mouse_wirelessMouse Wireless mouse_wireless Data 31 mai 2015 20:30:13
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>
#include <cassert>
#include <algorithm>
#include <vector>
using namespace std;
#define _submit
#ifdef _submit
#define InFile "cautbin.in"
#define OutFile "cautbin.out"
#else
#define InFile "fis.in"
#define OutFile "fis.out"
#endif

vector<int> v;

int main() {
	assert(freopen(InFile, "r", stdin));
	assert(freopen(OutFile, "w", stdout));
	int N;
	scanf("%d", &N);
	v.resize(N);
	for (int i = 0; i < N; ++i)
		scanf("%d", &v[i]);
	int M;
	scanf("%d", &M);
	vector<int>::iterator aux;
	for (int i = 0; i < M; i++) {
		int op, x;
		scanf("%d%d", &op, &x);
		switch (op) {
		case 0:
			aux = upper_bound(v.begin(), v.end(), x);
			if (aux == v.begin())
				printf("%d\n", -1);
			else {
				aux--;
				if (*aux == x)
					printf("%d\n", distance(v.begin(), aux) + 1);
				else
					printf("%d\n" - 1);
			}
			break;
		case 1:
			aux = upper_bound(v.begin(), v.end(), x);
			aux--;
			printf("%d\n", distance(v.begin(), aux) + 1);
			break;
		case 2:
			aux = lower_bound(v.begin(), v.end(), x);
			printf("%d\n", distance(v.begin(), aux) + 1);
			break;
		}
	}
	return 0;
}