Cod sursa(job #2217703)

Utilizator MariaDMaria D MariaD Data 1 iulie 2018 16:10:29
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>

using namespace std;

#define N 100000

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

int v[N];

int binSearch(int value, int numElem) {
	int i, step;

	for (step = 1; step < numElem; step <<= 1);
	for (i = 0; step; step >>= 1) {
		if (i + step < numElem && v[i + step] <= value)
			i += step;
	}

	return i;
}

int main() {
	int numElem, numQuery, type, value;
	fin >> numElem;
	for (int i = 0; i < numElem; i++)
		fin >> v[i];

	fin >> numQuery;
	while (numQuery) {
		fin >> type >> value;
		switch (type) {
			case 0: {
				int pos = binSearch(value, numElem);
				if (v[pos] == value)
					fout << pos + 1 << "\n";
				else
					fout << -1 << "\n";
				break;
			}
			case 1: {
				int pos = binSearch(value, numElem);
				fout << pos + 1 << "\n";
				break;
			}
			case 2: {
				int pos = binSearch(value - 1, numElem);
				fout << pos + 2 << "\n";
				break;
			}
		}

		numQuery--;
	}

	return 0;
}