Cod sursa(job #1807408)

Utilizator uacyUntesu Albert uacy Data 16 noiembrie 2016 16:04:29
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int binarySearch(vector<int> &vect, int target, int mission) {
	int lo = 0, hi = vect.size(), mi = (lo + (hi - lo)) / 2;

	while (lo < hi) {
		if (vect[mi] == target) {
			if (mission != 2) {
				while (vect[mi + 1] == target) ++mi;
				return mi + 1;
			} else {
				while (vect[mi - 1] == target) --mi;
				return mi + 1;
			}
		} else if (vect[mi] < target) {
			lo = mi;
			mi = (lo + (hi - lo)) / 2;
		} else {
			hi = mi;
			mi = (lo + (hi - lo)) / 2;
		}
	}

	if (mission == 1) {
		while (vect[mi] < target) ++mi;
		return mi + 1;
	}

	if (mission == 2) {
		while (vect[mi] > target) --mi;
		return mi + 1;
	}

	return -1;
}


int main() {

	ifstream fi("cautbin.in");
	ofstream fo("cautbin.out");
	vector<int> vect;
	int n, x, noTasks;
	vector<pair<int, int> > tasks;

	fi >> n;

	for (int i = 0; i < n; ++i) {
		fi >> x;
		vect.push_back(x);
	}

	fi >> noTasks;

	for (int i = 0; i < noTasks; ++i) {
		pair<int, int> aux;

		fi >> aux.first;
		fi >> aux.second;

		tasks.push_back(aux);
	}

	for (int i = 0; i < noTasks; ++i) {
		fo << binarySearch(vect, tasks[i].second, tasks[i].first) << endl;
	}



	fo.close();
	fi.close();

	return 0;
}