Cod sursa(job #2739320)

Utilizator muiepulicimatacutactu muiepulici Data 7 aprilie 2021 18:55:41
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>

int BinarySearch0(unsigned long* V, int n, unsigned long num) {
	int l = 0;
	int r = n - 1;

	int mid;

	int ret = -1;

	while (l <= r) {
		mid = l + (r - l) / 2;

		if (V[mid] > num)
			r = mid - 1;
		else if (V[mid] < num)
			l = mid + 1;
		else {
			ret = mid;

			l = mid + 1;
		}
	}

	return (ret == -1) ? ret : ret + 1;
}

int BinarySearch1(unsigned long* V, int n, unsigned long num) {
	int l = 0;
	int r = n - 1;

	int mid;

	int ret;

	while (l <= r) {
		mid = l + (r - l) / 2;

		if (V[mid] > num)
			r = mid - 1;
		else {
			ret = mid;

			l = mid + 1;
		}
	}

	return ret + 1;
}

int BinarySearch2(unsigned long* V, int n, unsigned long num) {
	int l = 0;
	int r = n - 1;

	int mid;

	int ret;

	while (l <= r) {
		mid = l + (r - l) / 2;

		if (V[mid] < num)
			l = mid + 1;
		else {
			ret = mid;

			r = mid - 1;
		}
	}

	return ret + 1;
}

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;
	unsigned long x;

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

		if (p == 0)
			fout << BinarySearch0(V, N, x) << '\n';
		else if (p == 1)
			fout << BinarySearch1(V, N, x) << '\n';
		else if (p == 2)
			fout << BinarySearch2(V, N, x) << '\n';
	}

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

	return 0;
}