Cod sursa(job #2787954)

Utilizator Radu_marioRadu Mario Radu_mario Data 24 octombrie 2021 14:32:36
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.65 kb
#include <bits/stdc++.h>
using namespace std;

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

int a[100005];

int main()
{
	int N, i, logN, lg; fin >> N;
	for (i = 1; i <= N; ++i) fin >> a[i];
	for (logN = 1; logN <= N; logN <<= 1);

	int M; fin >> M;
	for (int q, x; M; --M)
	{
		fin >> q >> x;
		if (q < 2)
		{
			for (lg = logN, i = 0; lg; lg >>= 1)
				if (i + lg <= N && a[i + lg] <= x) i += lg;

			if (!q && a[i] != x) fout << -1 << '\n';
			else fout << i << '\n';
		}
		else
		{
			for (lg = logN, i = N; lg; lg >>= 1)
				if (i - lg > 0 && a[i - lg] >= x) i -= lg;

			fout << i << '\n';
		}
	}
	return 0;
}