Cod sursa(job #1303714)

Utilizator costty94Duica Costinel costty94 Data 28 decembrie 2014 12:50:34
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>

using namespace std;

int a[100100], x, t, n, op, i;

int cauta1(int x)
{
	int left = 1;
	int mid;
	int right = n;
	while (left <= right)
	{
		mid = (left + right) / 2;
		if (a[mid] > x)
			right = mid - 1;
		else if (a[mid] < x)
			left = mid + 1;
		else break;
	}
	if (a[mid] != x)
		return -1;
	else
	{
		while (a[mid] == x)
			mid++;
	}
	return mid;
}
int cauta2(int x)
{
	int left = 1;
	int mid;
	int right = n;
	while (left <= right)
	{
		mid = (left + right) / 2;
		if (a[mid] > x)
			right = mid - 1;
		else if (a[mid] < x)
			left = mid + 1;
		else break;
	}
	while (a[mid] <= x)
			mid++;
	return mid;
}
int cauta3(int x)
{
	int left = 1;
	int right = n;
	int mid;
	while (left <= right)
	{
		mid = (left + right) / 2;
		if (a[mid] > x)
			right = mid - 1;
		else if (a[mid] < x)
			left = mid + 1;
		else break;
	}
	while (a[mid] >= x)
			mid--;
	
	return mid;
}
int main()
{
	ifstream f("cautbin.in");
	ofstream g("cautbin.out");
	f >> n;
	for (i = 1; i <= n; i++)
		f >> a[i];
	f >> t;
	for (i = 1; i <= t; i++)
	{
		f >> op >> x;
		if (op == 0)
		{
			g << cauta1(x) - 1 << "\n";
		}
		else if (op == 1)
		{
			g << cauta2(x) - 1<< "\n";
		}
		else if (op == 2)
		{
			g << cauta3(x) + 1<< "\n";
		}
	}
	return 0;
}