Cod sursa(job #2588736)

Utilizator KernelovicNegrean Victor Kernelovic Data 25 martie 2020 13:19:19
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;

int sir[100005], n;

int pozMin(int x)
{
	int left = -1, right = n - 1, mid;
	
	while(right - left > 1)
	{
		mid = (right + left) / 2;
		if(sir[mid] >= x) right = mid;
		else left = mid;
	}
	
	return right;
}

int pozMax(int x)
{
	int left = 0, right = n, mid;
	
	while(right - left > 1)
	{
		mid = (right + left) / 2;
		if(sir[mid] > x) right = mid;
		else left = mid;
	}	
	
	return left;
}

int main()
{
	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);
	cin >> n;
	
	for(int i = 0; i < n; i++)
	{
		cin >> sir[i];
	}
	
	int op, cerinta, nr; 
	cin >> op;
	
	for(int i = 0; i < op; i++)
	{
		cin >> cerinta >> nr;
		int lower_b = pozMax(nr);
		switch(cerinta) {
			case 0: if(sir[lower_b] != nr) cout << -1 << '\n';
			        else cout << ++lower_b << '\n';
			        break;
			case 1: cout << ++lower_b << '\n'; break;
			case 2: cout << pozMin(nr) + 1 << '\n';
		}
	}
}