Cod sursa(job #1113739)

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

int n, m, i, v[100000], val, opt;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

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 = -1;
	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 = -1;
	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() {
	fin >> n;
	for(i = 0; i < n; i++) fin >> v[i];
	fin >> m;
	for(i = 0; i < m; i++) {
		fin >> opt >> val;
		switch(opt) {
		case 0:
			fout << f0(val) + 1 << "\n";
			break;
		case 1:
			fout << f1(val) + 1 << "\n";
			break;
		case 2:
			fout << f2(val) + 1 << '\n';
		}
	}
	return 0;
}