Cod sursa(job #1152220)

Utilizator theodor.moroianuTheodor Moroianu theodor.moroianu Data 24 martie 2014 16:49:35
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
using namespace std;
void f1(int x);
void f2(int x);
void f3(int x);
int n, m, v[10000], i, b, cit, q;
long long p;
ofstream out("cautbin.out");
int main(){
	ifstream in("cautbin.in");

	in >> n;
	for (i = 1; i <= n; i++)
		in >> v[i];
	in >> m;
	for (int k = 1; k <= m; k++){
		in >> q >> cit;
		if (q == 0)
			f1(cit);
		else if (q == 2)
			f2(cit);
		else
			f3(cit);

	}
}
void f1(int x){
	b = 0;
	p = 1 << 16;
	while (p != 0){
		if (b + p<n&&v[b + p] <= x)
			b += p;
		p /= 2;
	}
	if (v[b]<cit)
		out << -1 << "\n";
	else
		out << b << "\n";
}
void f2(int x){
	b = 0;
	p = 1 << 16;
	while (p != 0){
		if (b + p<n&&v[b + p] <= x)
			b += p;
		p /= 2;
	}
	out << b << "\n";
}
void f3(int x){
	b = p = 1 << 16;
	while (p != 0){
		if (b - p>=0&&v[b - p] >= x)
			b -= p;
		p /= 2;
	}
	out << b << "\n";
}