Cod sursa(job #1930658)

Utilizator raducostacheRadu Costache raducostache Data 19 martie 2017 10:36:15
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
#include <algorithm>

using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, x,v[100001];
void solve0(){
	int index = 0;
	int p2 = 1;
	while (p2 < n)
		p2 <<= 1;
	while (p2 > 0) {
		if (p2 + index < n && x >= v[index + p2])
			index += p2;
		p2 >>= 1;
	}
	if (v[index] == x)g << index;
	else g << -1;
	g << '\n';
}
int main() {
	int i;
	f >> n;
	for (i = 1;i <= n;++i)
		f >> v[i];
	int nc;
	f >> nc;
	for (i = 1;i <= nc;++i)
	{
		int c;
		f >> c >> x;
		if (c == 0)
			solve0();
		else if (c == 1) {
			x = lower_bound(v + 1, v + n + 1, x + 1) - v - 1;
			g << x << '\n';
		}
		else {
			x = upper_bound(v + 1, v + n + 1, x - 1) - v;
			g << x;
		}
	}
	return 0;
}