Cod sursa(job #2729429)

Utilizator mafiotxrobeert mafiotx Data 24 martie 2021 18:28:23
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.88 kb
	#include <iostream>
	#include <fstream>
	#include <cmath>
	#include <bitset>
	#include <cstring>
	#include <algorithm>

	using namespace std;

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

	typedef unsigned long long ull;

	int n, v[100001];

	int cb0(int numar)
	{
		/*
		 cea mai mare pozitie pe
		 care se afla un element cu
		 valoarea x sau -1 daca
		 aceasta valoare nu se gaseste in sir
		 */

		int left = 1;
		int right = n;
		int pos = 0;
		while (left <= right)
		{
			int mid = left + (right - left) / 2;
			if (v[mid] <= numar)
			{
				pos = mid;
				left = mid + 1;
			}
			else
				right = mid - 1;
		}
		if (v[pos] == numar)
			return pos;
		return -1;

	}

	int cb1(int numar)
	{
		/*
		cea mai mare pozitie pe
		care se afla un element
		cu valoarea mai mica sau
		egala cu x in sir.
		*/

		int left = 1;
		int right = n;
		int pos = 0;
		while (left <= right)
		{
			int mid = left + (right - left) / 2;
			if (v[mid] <= numar)
			{
				pos = mid;
				left = mid + 1;
			}
			else
				right = mid - 1;
		}
		return pos;
	}

	int cb2(int numar)
	{
		/*
		cea mai mica pozitie pe 
		care se afla un element 
		cu valoarea mai mare sau
		egala cu x in sir
		*/

		int left = 1;
		int right = n;
		int pos = 0;
		while (left <= right)
		{
			int mid = left + (right - left) / 2;
			if (v[mid] >= numar)
			{
				pos = mid;
				right = mid - 1;
			}
			else
				left = mid + 1;
		}
		return pos;
	}

	int main()
	{
		fin >> n;
		for (int i = 1; i <= n; i++)
			fin >> v[i];
	
		int T, caz, val,x;
		fin >> T;
		for (int i = 1; i <= T; i++)
		{
			fin >> caz >> val;
			switch (caz)
			{
			case 0:
				x = cb0(val);
				break;
			case 1:
				x = cb1(val);
				break;
			case 2:
				x = cb2(val);
				break;
			}
			fout << x << '\n';
		}

		system("pause>nul");
	}