Cod sursa(job #1961169)

Utilizator SolcanMihaiSolcan Mihai Andrei SolcanMihai Data 10 aprilie 2017 22:13:44
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <cstdio>
#include <algorithm>

using namespace std;

const int N = 100005;

int n, m;
int sir[N];
int operatie, x;

void citire()
{
	scanf("%d", &n);

	for(int i = 0; i < n; i++)
	{
		scanf("%d", &sir[i]);
	}
}

int cautareBinara()
{
	if(operatie == 0)	
	{
		int poz = (upper_bound(sir, sir + n, x) - 1 - sir);

		if(poz >= 0 && poz < n)
		{
			return poz + 1;
		}
		else
		{
			return -1;
		}
	}
	else if(operatie == 1)
	{
		int poz = (lower_bound(sir, sir + n, x + 1) - 1 - sir);

		if(poz >= 0 && poz < n)
		{
			return poz + 1;
		}
		else
		{
			return -1;
		}
	}
	else if(operatie == 2)
	{
		///!!!!!!!Daca il transform ca pointer nu functineaza!!!! De intrebat la Manu
		int poz = (upper_bound(sir, sir + n, x - 1) - sir);

		if(poz >= 0 && poz < n)
		{
			return poz + 1;
		}
		else
		{
			return -1;
		}
	}
}

int main()
{
	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);

	citire();

	scanf("%d", &m);

	for(int k = 0; k < m; k++)
	{
		scanf("%d %d", &operatie, &x);

		printf("%d\n", cautareBinara());
	}

	return 0;
}