Cod sursa(job #1599400)

Utilizator rosuflaRosu Flaviu rosufla Data 13 februarie 2016 20:41:17
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
// Day5V5.cpp : Defines the entry point for the console application.
//

#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int a[100010], n;
int BinZero(int value);
int BinOne(int value);
int BinTwo (int value);
void citire() {
	int nr,nrFu,tip,value;
	f >> n;
	for (int i = 1; i <= n; ++i) {
		f >> nr;
		a[i] = nr;
	}
	f >> nrFu;
	for (int i = 1; i <= nrFu; ++i) {
		f >> tip >> value;
		if (tip == 0)
			g <<BinZero(value)<<"\n";
		if (tip == 1) {
			g << BinTwo(value)<<"\n";
		}
		if (tip == 2)
			g << BinOne(value)<<"\n";
	}
}
int BinZero(int value) {
	int low = 1, high = n, mid = (low + high / 2);
	while (low <= high) {
		mid = (low + high) / 2;
		if (a[mid] <= value)
			low = mid + 1;
		else
			high = mid - 1;
	}
	mid = (low + high) / 2;
	if (a[mid] > value)
		--mid;
	if (a[mid] == value)
		return mid;
	return -1;
}
int BinOne(int value) {
	int low = 1, high = n, mid = (low + high / 2);
	while (low <= high) {
		mid = (low + high) / 2;
		if (a[mid] < value)
			low = mid + 1;
		else
			high = mid - 1;
	}
	mid = (low + high) / 2;
	if (a[mid] < value)
		++mid;
	if (a[mid] == value)
		return mid;
	return -1;
}
int BinTwo(int value) {
	int low = 1, high = n, mid = (low + high / 2);
	while (low <= high) {
		mid = (low + high) / 2;
		if (a[mid] <= value)
			low = mid + 1;
		else
			high = mid - 1;
	}
	mid = (low + high) / 2;
	if (a[mid] > value)
		--mid;
	if (a[mid] == value)
		return mid;
	return -1;
}
int main()
{
	citire();
    return 0;
}