Cod sursa(job #1021398)

Utilizator radustn92Radu Stancu radustn92 Data 3 noiembrie 2013 19:36:06
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>
#include <iostream>
#define NMAX 100005
using namespace std;
int n, m, A[NMAX];

int cb1(int *A, int n, int val)
{
	int left = -1, right = n, mid;
	while (right - left > 1)
	{
		mid = (left + right) / 2;
		if (A[mid] <= val)
			left = mid;
		else
			right = mid;
	}
	if (left == -1 || A[left] != val)
		return -1;
	return left + 1;
}

int cb2(int *A, int n, int val)
{
	int left = -1, right = n, mid;
	while (right - left > 1)
	{
		mid = (left + right) / 2;
		if (A[mid] <= val)
			left = mid;
		else
			right = mid;
	}
	return left + 1;
}

int cb3(int *A, int n, int val)
{
	int left = -1, right = n, mid;
	while (right - left > 1)
	{
		mid = (left + right) / 2;
		if (A[mid] < val)
			left = mid;
		else
			right = mid;
	}
	return right + 1;
}

int main()
{
	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);
	cin >> n;
	int i, type, x;
	for (i = 0; i < n; i++)
		cin >> A[i];
	
	cin >> m;
	for (i = 0; i < m; i++)
	{
		cin >> type >> x;
		switch (type)
		{
			case 0: cout << cb1(A, n, x) << "\n"; break ;
			case 1: cout << cb2(A, n, x) << "\n"; break ;
			case 2: cout << cb3(A, n, x) << "\n"; break ;
		}
	}
	return 0;
}