Cod sursa(job #3148466)

Utilizator stefanchpStefan Chiper stefanchp Data 1 septembrie 2023 16:34:08
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

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

int n, a[1000005], q;

int main()
{
	fin >> n;
	for (int i = 1; i <= n; i++)
		fin >> a[i];
	fin >> q;

	int x, task, st, dr, mij, poz;
	bool ok;
	while (q != 0)
	{
		fin >> task >> x;
		q--;
		if (task == 0)
		{
			ok = 0;
			st = 1; dr = n;
			while (st <= dr)
			{
				mij = (st + dr) / 2;
				if (a[mij] == x)
				{
					ok = 1;
					poz = mij;
					st = mij + 1;
				}
				else if (a[mij] > x)
					dr = mij - 1;
				else if (a[mij] < x)
					st = mij + 1;
			}
			if (ok == 1) fout << poz << '\n';
			else fout << -1 << '\n';
		}
		else if (task == 1)
		{
			st = 1, dr = n;
			while (st <= dr)
			{
				mij = (st + dr) / 2;
				if (a[mij] <= x)
				{
					poz = mij;
					st = mij + 1;
				}
				else if (a[mij] > x)
					dr = mij - 1;
			}
			fout << poz << '\n';
		}
		else if (task == 2)
		{
			st = 1, dr = n;
			while (st <= dr)
			{
				mij = (st + dr) / 2;
				if (a[mij] >= x)
				{
					poz = mij;
					dr = mij - 1;
				}
				else if (a[mij] < x)
					st = mij + 1;
			}
			fout << poz << '\n';
		}
	}
	return 0;
}