Cod sursa(job #1786499)

Utilizator cazonirobertCazoni robert cazonirobert Data 23 octombrie 2016 02:04:21
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.81 kb
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<iomanip>
#include<vector>
#include<math.h>
#include<fstream>
#include<string>
#include<limits.h>
#include<climits>
#include<algorithm>
#include<unordered_set>

using namespace std;
 int cautbin0(vector<int>nums, int x)
{

	int lo = 0;
	int hi = nums.size() - 1;
	int ok = 0;
	int res = -1;
	while (lo<hi)
	{
		int mid = (int)(lo + ((double)hi - lo) / 2);
		if (nums[mid]>x)
		{
			hi = mid - 1;
		}
		else {
			if (nums[mid] == x) {
				ok = 1;
				res = mid;
			}
			lo = mid + 1;
		}
	}
	if (ok == 0)
		return -1;
	return res;
}
 int cautbin1(vector<int>nums, int x)
{

	int lo = 0;
	int hi = nums.size() - 1;
	int res = -1;
	while (lo<hi)
	{
		int mid = (int)(lo + ((double)hi - lo) / 2);
		if (nums[mid]>x)
		{
			hi = mid - 1;
		}
		else {
			if (nums[mid] <= x) {
				res = mid;
			}
			lo = mid + 1;
		}
	}
	return res;
}
 int cautbin2(vector<int>nums, int x)
{

	int lo = 0;
	int hi = nums.size() - 1;
	int res = -1;

	while (lo<hi)
	{
		int mid = (int)(lo + ((double)hi - lo) / 2);
		if (nums[mid]<x)
			lo = mid + 1;
		else {
			if (nums[mid] >= x)
			{
				res = mid;
			}
			hi = hi - 1;
		}
	}
	return res;
}
int main()
{
	ifstream in("cautbin.in");
	ofstream out("cautbin.out");
	int n;
	in >> n;
	vector<int> nums;
	for (int i = 0; i < n; i++)
	{
		int inter;
		in >> inter;
		nums.push_back(inter);
	}
	int querries;
	in >> querries;
	for (int i = 0; i < querries; i++)
	{
		int command;
		in >> command;
		int x;
		in >> x;
		switch (command) {
		case 0:
			out << cautbin0(nums, x)+1<<endl;
			break;
		case 1:
			out << cautbin1(nums, x) + 1<<endl;
			break;
		case 2:
			out << cautbin2(nums, x) + 1<<endl;
		}
	}
	in.close();
	out.close();
	return 0;
}