Cod sursa(job #1472215)

Utilizator aimrdlAndrei mrdl aimrdl Data 16 august 2015 17:34:03
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int m, n, v[100005];

inline int bsearch0 (int x) {
	int mid, l = 0, r = n+1;
	
	while (r - l > 1) {
		mid = (l + r) / 2;
		
		if (x < v[mid]) {
			r = mid;
		} else {
			l = mid;
		}
	}
	
	if (v[mid-1] == x) {
		return mid;
	}
	
	return -1;
}

inline int bsearch1 (int x) {
	int mid, l = 0, r = n+1;
	
	while (r - l > 1) {
		mid = (l + r) / 2;
		
		if (x < v[mid]) {
			r = mid;
		} else {
			l = mid;
		}
	}
	
	return mid;
}

inline int bsearch2 (int x) {
	int mid, l = 0, r = n+1;
	
	while (r - l > 1) {
		mid = (l + r) / 2;
		
		if (x < v[mid]) {
			l = mid;
		} else {
			r = mid;
		}
	}
	
	return mid + 1;
}
	
int main (void) {
	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);
	
	scanf("%d", &n);
	for (int i = 0; i < n; ++i) {
		cin >> v[i];
	}
	
	scanf("%d", &m);
	for (int i = 0; i < m; ++i) {
		int x, c;
		scanf("%d %d", &c, &x);
		
		if (c == 0) {
			printf("%d\n", bsearch0(x));
		} else if (c == 1) {
			printf("%d\n", bsearch1(x));
		} else {
			printf("%d\n", bsearch2(x));
		}
	}
	
	return 0;
}