Cod sursa(job #2922164)

Utilizator Mike037Simion Mihnea Mike037 Data 5 septembrie 2022 14:55:45
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);

	int n;

	cin >> n;

	vector<int> v(n);

	for (int i = 0; i < n; i++)
	{
		cin >> v[i];
	}

	int m;
	cin >> m;

	for (int i = 0; i < m; i++)
	{
		int x, y;
		cin >> x >> y;

		if (x == 0)
		{
			int mx = -1;
			int st = 0, dr = n - 1;

			while (st <= dr)
			{
				int mid = (st + dr) / 2;

				if (v[mid] > y)
				{
					dr = mid - 1;
				}
				else if (v[mid] < y)
				{
					st = mid + 1;
				}
				else if (v[mid] == y)
				{
					mx = mid;
					st = mid + 1;
				}
			}
			cout << mx + 1 << "\n";
		}
		else if (x == 1)
		{
			int mx = -1;
			int st = 0, dr = n - 1;

			while (st <= dr)
			{
				int mid = (st + dr) / 2;

				if (v[mid] > y)
				{
					dr = mid - 1;
				}
				else if (v[mid] <= y)
				{
					st = mid + 1;
					mx = mid;
				}
			}
			cout << mx + 1 << "\n";
		}
		else if (x == 2)
		{
			int mx = -1;
			int st = 0, dr = n - 1;

			while (st <= dr)
			{
				int mid = (st + dr) / 2;

				if (v[mid] >= y)
				{
					dr = mid - 1;
					mx = mid;
				}
				else if (v[mid] < y)
				{
					st = mid + 1;
				}
			}
			cout << mx + 1 << "\n";
		}
	}

	return 0;
}