Cod sursa(job #1314076)

Utilizator radudorosRadu Doros radudoros Data 11 ianuarie 2015 15:03:46
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#define NMAX 100005
using namespace std;

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

int v[NMAX];

int main()
{
	int n;
	fin >> n;
	for (int i = 1; i <= n; i++)
		fin >> v[i];
	int m;
	int pmax;
	int pas;
	for (pmax = 1; pmax <= n; pmax <<= 1);
	fin >> m;
	int tip, x,i;
	for (int j = 1; j <= m; j++)
	{
		fin >> tip >> x;
		if (tip == 0)
		{
			for (pas = pmax, i = 0; pas; pas >>= 1)
			{
				if (i + pas <= n && v[i + pas] <= x)
					i += pas;
			}
			if (v[i] != x)
				fout << -1 << '\n';
			else
				fout << i << '\n';
		}
		if (tip == 1)
		{
			for (pas = pmax, i = 0; pas; pas >>= 1)
			{
				if (i + pas <= n && v[i + pas] <= x)
					i += pas;
			}
			fout << i << '\n';
		}
		if (tip == 2)
		{
			for (pas = pmax, i = n; pas; pas >>= 1)
			{
				if (i - pas > 0 && v[i - pas] >= x)
					i -= pas;
			}
			fout << i << '\n';
		}
	}
}