Cod sursa(job #2770027)

Utilizator HadircaDionisieHadirca Dionisie HadircaDionisie Data 18 august 2021 21:43:08
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>

#define NMAX 100001

using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int n, xs[NMAX],m,op,num;

int caut_bin(int low, int high, int key) {
	int mid;
	
	while (low < high) {
		mid = (low + high) / 2;
		if (xs[mid] <= key) {
			low = mid + 1;
		}
		else if (xs[mid] > key) {
			high = mid - 1;

		}
	}
	mid = (low + high) / 2;

	if (xs[mid] > key) {
		mid--;
	}

	if (xs[mid] == key) {
		return mid;
	}
	return -1;
}

int caut_sus(int low, int high, int key) {
	int mid;
	while (low < high) {
		mid = (low + high) / 2;
		if (xs[mid] <= key) {
			low = mid + 1;
		}
		else {
			high = mid;
		}
	}

	mid = (low + high) / 2;
	if (xs[mid] > key) {
		mid--;
	
	}

	return mid;
}

int caut_jos(int low, int high, int key) {
	int mid;

	while (low < high) {
		mid = (low + high) / 2;
		if (xs[mid] < key) {
			low = mid + 1;
		}
		else {
			high = mid;
		}
	}
	mid = (low + high) / 2;
	if (xs[mid] < key) {
		mid += 1;
	}
	return mid;
}
int main()
{
	fin >> n;


	for (int i = 1; i <= n; i++) {
		fin >> xs[i];
	}

	fin >> m;

	for (int i = 0; i < m; i++) {
		fin >> op >> num;
		if (op == 0) {
			fout<<caut_bin(1, n, num)<<'\n';
		}
		else if (op == 1) {
			fout << caut_sus(1, n, num)<<'\n';
		}
		else {
			fout << caut_jos(1, n, num)<<'\n';
		}

	}

}