Cod sursa(job #779696)

Utilizator crushackPopescu Silviu crushack Data 18 august 2012 15:56:16
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>
#define NMax 100010

const char IN[]="cautbin.in",OUT[]="cautbin.out";

int N,M;
int v[NMax];

int search(int x){

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

int search2(int x){

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

int main()
{
	int i,c,x,poz;
	freopen(IN,"r",stdin);
	scanf("%d",&N);
	for (i=1;i<=N;++i) scanf("%d",v+i);
	scanf("%d",&M);
	freopen(OUT,"w",stdout);
	while (M--)
	{
		scanf("%d%d",&c,&x);
		if (c==0)
		{
			poz=search(x);
			printf("%d\n",v[poz]==x && 0<poz && poz<=N ? poz : -1);
		}
		else if (c==1) printf("%d\n",search(x));
		else printf("%d\n",search2(x));
	}
	fclose(stdout);
	fclose(stdin);
	return 0;
}