Cod sursa(job #2739308)

Utilizator muiepulicimatacutactu muiepulici Data 7 aprilie 2021 18:28:05
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <iostream>
#include <fstream>

int ret0 = -1;

int BinarySearch0(int* V, int l, int r, int num) {
	if (l > r)
		return -1;

	int mid = (l + r) / 2;

	if (V[mid] > num)
		return BinarySearch0(V, l, mid - 1, num);
	else if (V[mid] < num)
		return BinarySearch0(V, mid + 1, r, num);

	ret0 = mid;

	return BinarySearch0(V, mid + 1, r, num);
}

int ret1;

int BinarySearch1(int* V, int l, int r, int num) {
	if (l > r)
		return -1;

	int mid = (l + r) / 2;

	if (V[mid] > num)
		return BinarySearch1(V, l, mid - 1, num);

	ret1 = mid;

	return BinarySearch1(V, mid + 1, r, num);
}

int ret2;

int BinarySearch2(int* V, int l, int r, int num) {
	if (l > r)
		return -1;

	int mid = (l + r) / 2;

	if (V[mid] < num)
		return BinarySearch2(V, mid + 1, r, num);

	ret2 = mid;

	return BinarySearch2(V, l, mid - 1, num);
}

unsigned long V[100000];

int main() {
	std::ifstream fin("cautbin.in");
	std::ofstream fout("cautbin.out");

	int N;
	fin >> N;

	int i;

	for (i = 0; i < N; ++i)
		fin >> V[i];

	int M;
	fin >> M;

	int p, x;

	for (i = 0; i < M; ++i) {
		fin >> p >> x;

		if (p == 0) {
			BinarySearch0(V, 0, N - 1, x);

			if (ret0 == -1)
				fout << -1 << '\n';
			else
				fout << ret0 + 1 << '\n';
		} else if (p == 1) {
			BinarySearch1(V, 0, N - 1, x);

			fout << ret1 + 1 << '\n';
		} else if (p == 2) {
			BinarySearch2(V, 0, N - 1, x);

			fout << ret2 + 1 << '\n';
		}
	}

	fin.close();
	fout.close();

	return 0;
}