Cod sursa(job #1032883)

Utilizator L.DanielLungu Daniel L.Daniel Data 16 noiembrie 2013 10:22:39
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<fstream>

using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, i, t, x, v[100005], m;

int cautbinar0(int st, int dr, int x)
{
	int m;
	while (st <= dr)
	{
		m = (st + dr) / 2;
		if (v[m] <= x) st = m + 1;
		else dr = m - 1;
	}
	m = (st + dr) / 2;
	if (v[m]>x) m--;
	if (v[m] == x) return m;
	return -1;
}

int cautbinar1(int st, int dr, int x)
{
	int m;
	while (st<dr)
	{
		m = (st + dr) / 2;
		if (v[m] <= x) st = m + 1;
		else    dr = m;
	}
	m = (st + dr) / 2;
	if (v[m]>x)  --m;
	return m;
}

int cautbinar2(int st, int dr, int x)
{
	int m;
	while (st<dr)
	{
		m = (st + dr) / 2;
		if (v[m]<x)  st = m + 1;
		else    dr = m;
	}
	m = (st + dr) / 2;
	if (v[m]<x)  ++m;
	return m;
}

int main()
{
	f >> n;
	for (i = 1; i <= n; i++)
		f >> v[i];
	f >> m;
	for (i = 1; i <= m; i++)
	{
		f >> t >> x;
		if (t == 0)   g << cautbinar0(1, n, x) << "\n";
		if (t == 1)   g << cautbinar1(1, n, x) << "\n";
		if (t == 2)   g << cautbinar2(1, n, x) << "\n";
	}
	f.close();
	g.close();
	return 0;
}