Cod sursa(job #905477)

Utilizator tudorv96Tudor Varan tudorv96 Data 5 martie 2013 21:11:35
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>
using namespace std;

int v[100005], n, q;

int Bin (int t, int x)
{
	int lo = 1, hi = n, mid;
	while (lo <= hi)
	{
		mid = (lo + hi) / 2;
		if (v[mid] == x)
		{
			if (t < 2)
				while (v[mid+1] == x)
					mid++;
			else
				while (mid && v[mid-1] == x)
					mid--;
			return mid;
		}
		else
			if (v[mid] > x)
				hi = mid - 1;
		else
			if (v[mid] < x)
				lo = mid + 1;
	}
	if (!t)
		return -1;
	else
		return (t == 1 ? mid : mid + 1);
}

int main ()
{
	ifstream fin ("cautbin.in");
	fin >> n;
	for (int i = 1; i <= n; ++i)
		fin >> v[i];
	fin >> q;
	ofstream fout ("cautbin.out");
	for (int i = 0; i < q; ++i)
	{
		int t, nr;
		fin >> t >> nr;
		fout << Bin(t, nr) << "\n";
	}
	fin.close();
	fout.close();
	return 0;
}