Cod sursa(job #2673756)

Utilizator gavra_bogdanBogdan Gavra gavra_bogdan Data 17 noiembrie 2020 17:23:26
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>

const int nmax = 1e5 + 5;

int n, q, v[nmax], op, x;

int bs0(int x) {
	int st = 0, dr = n - 1, ans = -2;
	while (st <= dr) {
		int mij = (st + dr) / 2;
		if (v[mij] > x) dr = mij - 1;
		else {
			st = mij + 1;
			if (v[mij] == x) ans = mij;
		}
	}
	return ans + 1;
}

int bs1(int x) {
	int st = 0, dr = n - 1, ans;
	while (st <= dr) {
		int mij = (st + dr) / 2;
		if (v[mij] > x) dr = mij - 1;
		else st = mij + 1, ans = mij;
	}
	return ans + 1;
}

int bs2(int x) {
	int st = 0, dr = n - 1, ans;
	while (st <= dr) {
		int mij = (st + dr) / 2;
		if (v[mij] < x) st = mij + 1;
		else dr = mij - 1, ans = mij;
	}
	return ans + 1;
}

int main() {
	std::ifstream fin("cautbin.in");
	std::ofstream fout("cautbin.out");
	fin >> n;
	for (int i = 0; i < n; i++) fin >> v[i];
	fin >> q;
	while (q--) {
		fin >> op >> x;
		if(op==0) fout << bs0(x) << "\n";
		if(op==1) fout << bs1(x) << "\n";
		if(op==2) fout << bs2(x) << "\n";
	}
}