Cod sursa(job #1680405)

Utilizator McVxCretu Alexandru McVx Data 8 aprilie 2016 18:48:46
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <cstdio>

int bin_search(int v[], int n, int value, int mode)
{
	int start, end, mid;
	start = 0;
	end = n - 1;

	while (start <= end)
	{
		mid = (end + start) / 2;

		if (value < v[mid])
		{
			end = mid - 1;
		}
		else if (value > v[mid])
		{
			start = mid + 1;
		}
		else
		{
			if (mode < 2)
			{
				while (v[++mid] == value);
				mid--;
			}
			else
			{
				while (v[--mid] == value);
				mid++;
			}

			return mid;
		}
	}

	if (mode == 1)
	{
		return end;
	}
	else if (mode == 2)
	{
		return start;
	}

	return -1;
}

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

	int n, m, x, act, v[100000];

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

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

		int p = bin_search(v, n, x, act);
		printf("%d\n", p == -1 ? -1 : p + 1);
	}

	return 0;
}