Cod sursa(job #2787988)

Utilizator Radu_marioRadu Mario Radu_mario Data 24 octombrie 2021 16:03:17
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 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; fin >> N;
	for (i = 1; i <= N; ++i) cin >> a[i];
	for (logN = 1; logN <= N; logN <<= 1);

	int M, lg; 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) cout << -1 << '\n';
			else cout << i << '\n';
		}
		else
		{
			for (int lg = logN, i = N; lg; lg >>= 1)
				if (i - lg >= 1 && a[i - lg] >= x) i -= lg;

			cout << i << '\n';
		}
	}
	return 0;
}
*/

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

	int M; fin >> M;
	for (int i = 1, q, x, y; i <= M; ++i)
	{
		fin >> q >> x;
		if (!q)
		{
			y = upper_bound(a + 1, a + N + 1, x) - a - 1;
			if (y >= 1 && y <= N && a[y] == x) fout << y << '\n';
			else fout << -1 << '\n';
		}
		else if(q == 1)
		{
			y = lower_bound(a + 1, a + N + 1, x + 1) - a - 1;
			fout << y << '\n';
		}
		else
		{
			y = upper_bound(a + 1, a + N + 1, x - 1) - a;
			fout << y << '\n';
		}
	}
	return 0;
}