Cod sursa(job #235322)

Utilizator MarquiseMarquise Marquise Data 23 decembrie 2008 13:41:34
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>

#define NMAX 100005


int N, M, a[NMAX], t;


int BS0( int x)
{

	int st, dr, m;

	for ( st = 1, dr = N; st <= dr; )
	{
		m = st + (dr - st) / 2;
		if ( x < a[m] )
			dr = m - 1;
		else

		if ( x > a[m] )
			st = m + 1;
		else

			return m;
	}

	return -1;
}


int BS1(int x)
{

	int st, dr, m, u;

	for ( st = 1, dr = N; st <= dr; )
	{
		m = st + (dr - st) / 2;
		if ( a[m] <= x)
		{
			u = m;
			st = m + 1;
		}
		else

			dr = m - 1;
	}

	return u;
}


int BS2(int x)
{

	int st, dr, m, u;

	for ( st = 1, dr = N; st <= dr; )
	{
		m = st + (dr - st) / 2;
		if ( x <= a[m] )
		{
			u = m;
			dr = m - 1;
		}
		else

			st = m + 1;
	}

	return u;
}


int main()
{
	int i, x;

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

	scanf("%d", &N);
	for ( i = 1; i <= N; i++)
		scanf("%d", &a[i]);

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

		if ( t == 0)
			printf("%d\n", BS0(x) );
		else
		if ( t == 1)
			printf("%d\n", BS1(x) );
		else
			printf("%d\n", BS2(x) );


	}

	return 0;
}