Cod sursa(job #3255853)

Utilizator mihai.25Calin Mihai mihai.25 Data 12 noiembrie 2024 16:09:07
Problema Cautare binara Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>

using namespace std;

ifstream cin ("cautbin.in");

ofstream cout ("cautbin.out");

int caut_bin_0 (int n, int v[], int x) {

	int poz = -1, st = 1, dr = n;

	while (st <= dr) {

		int mij = st + (dr - st) / 2;

		if (v[mij] == x) {

			poz = mij;

			st = mij + 1;
		}
		else {

			if (v[mij] > x)
				dr = mij - 1;
			else
				st = mij + 1;
		}
	}

	return poz;
}

int caut_bin_1 (int n, int v[], int x) {

	int poz = 0, st = 1, dr = n;

	while (st <= dr) {

		int mij = st + (dr - st) / 2;

		if (v[mij] > x) {

			poz = mij;

			dr = mij - 1;
		}
		else
			st = mij + 1;
	}

	return poz - 1;
}

int caut_bin_2 (int n, int v[], int x) {

	int poz = 0, st = 1, dr = n;

	while (st <= dr) {

		int mij = st + (dr - st) / 2;

		if (v[mij] < x) {

			poz = mij;

			st = mij + 1;
		}
		else
			dr = mij - 1;
	}

	return poz + 1;
}

int main () {

	int n, m, v[100001];

	cin >> n;

	for (int i = 1; i <= n; ++i)
		cin >> v[i];
	
	cin >> m;

	while (m--) {

		int cerinta, x;

		cin >> cerinta >> x;

		switch (cerinta) {

			case 0: cout << caut_bin_0 (n, v, x) << '\n';
					break;
			
			case 1: cout << caut_bin_1 (n, v, x) << '\n';
					break;
			
			case 2: cout << caut_bin_2 (n, v, x) << '\n';
					break;
		}
	}

	return 0;
}