Cod sursa(job #2706843)

Utilizator UnknownPercentageBuca Mihnea-Vicentiu UnknownPercentage Data 15 februarie 2021 21:31:01
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
 
using namespace std;
 
ifstream f("cautbin.in");
ofstream g("cautbin.out");

int a[100001];
int N, Q, q, x;

int LowerBound1(int x){
	int l = 1, r = N;
	while(l <= r){
		int m = (l + r) >> 1;
		if(a[m] > x) r = m - 1;
		else l = m + 1;
	}

	return (a[r] == x)? r : -1;
}

int LowerBound2(int x){
	int l = 1, r = N;
	while(l <= r){
		int m = (l + r) >> 1;
		if(a[m] > x) r = m - 1;
		else l = m + 1;
	}

	return r;
}

int LowerBound3(int x){
	int l = 1, r = N;
	while(l <= r){
		int m = (l + r) >> 1;
		if(a[m] < x) l = m + 1;
		else r = m - 1;
	}

	return l;
}


int main(){
	f >> N;
	for(int i = 1;i <= N;i++)
		f >> a[i];
	a[0] = -1;
	f >> Q;
	while(Q--){
		f >> q >> x;
		if(q == 0) g << LowerBound1(x) << "\n";
		if(q == 1) g << LowerBound2(x) << "\n";
		if(q == 2) g << LowerBound3(x) << "\n";
	}
}