Cod sursa(job #1101622)

Utilizator negrea.andreiAndrei Negrea negrea.andrei Data 8 februarie 2014 20:01:11
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include<fstream>
#define N 100005

using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int A[N];
int n, m;

int BinarySearch2(int x)
{
	int lf = 1;
	int rt = n;

	while (rt - lf > 1)
	{
		int mid = (lf + rt) / 2;
		if (x > A[mid])
		{
			lf = mid + 1;
		}
		else
		{
			rt = mid;
		}
	}

	if (A[lf] >= x) return lf;
	if (A[rt] >= x) return rt;
	return -1;
}

int BinarySearch1(int x)
{
	int lf = 1;
	int rt = n;

	while (rt - lf > 1)
	{
		int mid = (lf + rt) / 2;
		if (x < A[mid])
		{
			rt = mid - 1;
		}
		else
		{
			lf = mid;
		}
	}

	if (A[rt] <= x) return rt;
	if (A[lf] <= x) return lf;
	return -1;
}

int BinarySearch0(int x)
{
	int lf = 1;
	int rt = n;

	while (rt - lf > 1)
	{
		int mid = (lf + rt) / 2;
		if (x < A[mid])
		{
			rt = mid - 1;
		}
		else
		{
			lf = mid;
		}
	}

	if (A[rt] == x) return rt;
	if (A[lf] == x) return lf;
	return -1;
}
int main()
{
	f >> n;
	for(int i = 1; i <= n; i++)
	{
		f >> A[i];
	}

	f >> m;
	for(int i = 1; i <= m; i++)
	{
		int codop, x;
		f >> codop >> x;

		if (codop == 0)
		{
			g << BinarySearch0(x) << "\n";
		}
		if (codop == 1)
		{
			g << BinarySearch1(x) << "\n";
		}
		if (codop == 2)
		{
			g << BinarySearch2(x) << "\n";
		}
	}
}