Cod sursa(job #290318)

Utilizator snaked31Stanica Andrei snaked31 Data 27 martie 2009 19:05:45
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>

#define nm 100010

int n, m, i, x, y, t, sol;
int v[nm];


void read()

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


int bs(int l, int r, int val)

{
	int mid = (l + ((r-l)/2));

	if (l > r)
		return l;
	if (v[mid] == val)
		return mid;
	if (v[mid] < val)
		return bs(mid+1, r, val);
	else
		return bs(l, mid-1, val);
}


void solve()

{
	for (i=1; i<=m; ++i)
	{
		scanf("%d %d", &t, &x);
		if (t == 0)
		{

			y = bs(1, n, x);
			sol = -1;
			if (v[y] == x)
				sol = y;
		}
		else
		if (t == 1)
		{
			y = bs(1, n, x);
			while (v[y] <= x && y <=n)
				++y;
			sol = --y;
		}
		else
		{
			y = bs(1, n, x);
			while (v[y] >= x && y > 0)
				--y;
			sol = ++y;
		}

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


int main()

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

	read();
	solve();

	return 0;
}