Cod sursa(job #2974052)

Utilizator dumitrache12Dumitrache Iulian dumitrache12 Data 2 februarie 2023 23:17:26
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include<bits/stdc++.h>
using namespace std;

const int N = 100009;
int n, v[N];

ifstream in ("cautbin.in");
ofstream out("cautbin.out");
// auto& in = cin;
// auto& out = cout;
int upper_bound(int x)
{
	int poz=0;
	for(int i=1<<30; i; i>>=1)
		if(poz|i < n && v[poz|i] <= x)
			poz|=i;
	return poz;
}
int lower_bound(int x)
{
	int poz=0;
	for(int i=1<<30; i; i>>=1)
		if(poz|i < n && v[poz|i] < x)
			poz|=i;
	return poz+1;
}
int main(){
	in>>n;
	for(int i=0; i < n; i++)
		in>>v[i];
	
	int m, t, x, u, l;
	for(in>>m; m>0; m--)
	{
		in>>t>>x;
		u = upper_bound(x) + 1;
		l = lower_bound(x) + 1;
		if(t==0) out<<(l<u?u:-1)<<endl;
		if(t==1) out<<u<<endl;
		if(t==2) out<<l<<endl;
		
	}
	return 0;
}