Cod sursa(job #1786661)

Utilizator cazonirobertCazoni robert cazonirobert Data 23 octombrie 2016 14:10:47
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.9 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;
vector<int>nums;
 int cautbin0( 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( 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(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;
		int res=0;
		switch (command) {
		case 0:
			res = cautbin0(x);
			if (res != -1)
			{
				res += 1;
			}
			out << res<<endl;
			break;
		case 1:
			out << cautbin1(x) + 1<<endl;
			break;
		case 2:
			out << cautbin2(x) + 1<<endl;
		}
	}
	in.close();
	out.close();
	return 0;
}