Cod sursa(job #2277927)

Utilizator livliviLivia Magureanu livlivi Data 7 noiembrie 2018 01:59:28
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include<fstream>
#define N 100000
#define P 17
using namespace std;

ifstream cin("cautbin.in");
ofstream cout("cautbin.out");

int v[N + 2];

int binary_search(int n, int x, int strict){
	int p = (1 << P);
	int ans = 0;

	while(p > 0){
		if (ans + p <= n && v[ans + p] + strict <= x) ans += p;
		p /= 2;
	}

	return ans;
}

int main(){
	int n;
	cin>>n;

	for(int i = 1; i <= n; i++)
		cin>>v[i];

	int q;
	cin>>q;

	for(int i = 1; i <= q; i++){
		int a, b;
		cin>>a>>b;

		if (a == 2)
			cout<<binary_search(n, b, 1) + 1<<'\n';
		else
		if (a == 1)
			cout<<binary_search(n, b, 0)<<'\n';
		else
		if (a == 0){
			a = binary_search(n, b, 0);
			if (v[a] != b) a = -1;

			cout<<a<<'\n';
		}
	}

	return 0;
}