Cod sursa(job #2919865)

Utilizator alt_contStefan alt_cont Data 20 august 2022 13:31:09
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <iostream>

using namespace std;

int v[100006];
int w[100006];


int binsearc(int l, int r, int arr[], int x){
	if(arr[l] > x)
		return -1;

	if(l == r)
		return l;

	int mid = (l + r) / 2;

	if(arr[mid + 1] <= x)
		return binsearc(mid + 1, r, arr, x);
	else
		return binsearc(l, mid, arr, x);

}

int query(int q, int x, int n){
	int idx;
	switch(q){
		case 0:
			idx = binsearc(0, n - 1, v, x);
			return x == v[idx] ? idx : -2;
		case 1:
			return binsearc(0, n - 1, v, x);
		case 2:
			return (n - 1) - binsearc(0, n - 1, w, -x);
	}
	return -1;
}


int main(){
	ifstream fin("cautbin.in");
	ofstream fout("cautbin.out");
	int n, m, q, x;
	fin >> n;
	for(int i = 0; i < n; ++i){
		fin >> v[i];
		w[n - 1 - i] = -v[i];
	}
	fin >> m;
	for(int i = 0; i < m; ++i){
		fin >> q >> x;
		fout << query(q, x, n) + 1 << "\n";
	}

}