Cod sursa(job #1899812)

Utilizator SaphyrosMarcus Sergiu David Saphyros Data 2 martie 2017 22:30:07
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;

int n, x, a[100002], piv, lo, hi;

ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");

void b0(){
	lo = 0, hi = n - 1;
	while (lo <= hi){
		piv = (lo + hi) / 2;
		if (a[piv] <= x)
			lo = piv + 1;
		else
			hi = piv - 1;
	}
	piv = (lo + hi) / 2;
	if (a[piv] > x) piv++;
	if (a[piv] == x)
		fout << piv+1 << "\n";
	else
		fout << -1 << "\n";
}

void b1(){
	lo = 0, hi = n - 1;
	while (lo < hi){
		piv = (lo + hi) / 2;
		if (a[piv] <= x)
			lo = piv + 1;
		else
			hi = piv;
	}
	piv = (lo + hi) / 2;
	if (a[piv] > x)
		piv--;
	fout << piv+1 << "\n";
}

void b2(){
	lo = 0, hi = n - 1;
	while (lo < hi){
		piv = (lo + hi) / 2;
		if (a[piv] < x)
			lo = piv + 1;
		else
			hi = piv;
	}
	piv = (lo + hi) / 2;
	if (a[piv] < x)
		piv++;
	fout << piv+1 << "\n";
}

int main(){
	fin >> n;
	for (int i = 0; i < n; i++){
		fin >> a[i];
	}
	int m, c;
	fin >> m;
	while (m--){
		fin >> c >> x;
		if (c == 0)
			b0();
		else if (c == 1)
			b1();
		else if (c == 2)
			b2();
	}
	
	fin.close();
	fout.close();
	
	return 0;
}