Cod sursa(job #1029164)

Utilizator danny794Dan Danaila danny794 Data 15 noiembrie 2013 01:58:42
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>
#include <algorithm>

#define MAX 100000

using namespace std;

int n, m, v[MAX];

inline void read(){
	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);
}

inline void read_data(){
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
		scanf("%d",&v[i]);
	scanf("%d", &m);
}

void solve(int type, int x){
	int lower = lower_bound(v, v + n - 1, x) - v, upper = upper_bound(v, v + n - 1, x) - v;
	switch(type){
	case(0):if (v[upper] == x)
				printf("%d\n", upper + 1);
			else if (v[upper - 1] == x)
				printf("%d\n", upper);
			else
				printf("-1\n");
			break;
	case(1):if (v[upper] <= x)
				printf("%d\n", upper + 1);
			else
				printf("%d\n", upper);
			break;
	case(2): upper = upper_bound(v, v + n - 1, x - 1) - v;
			printf("%d\n", upper + 1); break;
	}
}

int main() {
	read();
	read_data();
	int type, x;
	while (m > 0){
		m--;
		scanf("%d %d", &type, &x);
		solve(type, x);
	}
	return 0;
}