Cod sursa(job #196728)

Utilizator marinaMarina Horlescu marina Data 28 iunie 2008 13:27:29
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
//Cautare binara - Arhiva educationala(Ideea lui Mihai Patrascu)
#include <stdio.h>
#define INPUT "cautbin.in"
#define OUTPUT "cautbin.out"
#define NMAX 131072
int N, M;

int v[NMAX];

int caut_bin(int val)
{
	int i, step;
	for(step = 1; step < N; step <<= 1);
	
	for(i = 0; step; step >>= 1)
		if(i + step <= N && v[i + step] <= val)
			i += step;
	
	return i;
}

int main()
{
	freopen(INPUT, "r", stdin);
	freopen(OUTPUT, "w", stdout);
	
	scanf("%d", &N);
	int i;
	for(i = 1; i <= N; ++i)
		scanf("%d", v+i);
	
	scanf("%d", &M);
	for(i = 1;  i <= M; ++i)
	{
		int tip, val;
		scanf("%d %d", &tip, &val);
		
		int rez = caut_bin(val);
		if(tip == 0)
		{
			if(v[rez] != val) rez = -1;
		}
		else if(tip == 2)
		{
			if(v[rez] != val) ++rez;
		}
		
		printf("%d\n", rez);
	}
	
	return 0;
}