Cod sursa(job #1113736)

Utilizator sorin2kSorin Nutu sorin2k Data 20 februarie 2014 21:03:03
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<iostream>
using namespace std;

int n, m, i, v[100000], val, opt;

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

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

int f2(int x) {
	int l = 0, r = n, m, poz;
	while(l <= r) {
		m = l + (r-l)/2;
		if(v[m] < x) l = m+1;
		else poz = m, r = m-1;
	}
	return poz;
}

int main() {
	cin >> n;
	for(i = 0; i < n; i++) cin >> v[i];
	cin >> m;
	for(i = 0; i < m; i++) {
		cin >> opt >> val;
		switch(opt) {
		case 0:
			cout << f0(val) + 1 << "\n";
			break;
		case 1:
			cout << f1(val) + 1 << "\n";
			break;
		case 2:
			cout << f2(val) + 1 << '\n';
		}
	}
	return 0;
}