Cod sursa(job #2098281)

Utilizator dragos.galeteanu2001Dragos Iulian dragos.galeteanu2001 Data 2 ianuarie 2018 17:10:55
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
#define limit 100005

using namespace std;

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

int n, m, logN, v[limit];

int main()
{
	int i, x, y, j, aux;

	in >> n;
    for (i = 1; i <= n; i++) in >> v[i];

	for (logN = 1; logN <= n; logN <<= 1);

	in >> m;

	for (j = 1; j <= m; j++) {

		in >> x >> y;

		if (x < 2) {
			for (i = 0, aux = logN; aux; aux >>= 1)
				if (i + aux <= n && v[i + aux] <= y) i += aux;

			if (!x && v[i] != y) out << "-1" << '\n';
			else out << i << '\n';

			continue;
		}

		for (i = n, aux = logN; aux; aux >>= 1)
			if (i - aux >= 1 && v[i - aux] >= y) i -= aux;

		out << i << '\n';
	}
	in.close();
	out.close();
    return 0;
}