Cod sursa(job #795297)

Utilizator radustn92Radu Stancu radustn92 Data 7 octombrie 2012 23:54:47
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#define NMAX 100005
int n,m,A[NMAX];
void read()
{
	scanf("%d",&n);
	int i;
	for (i=1; i<=n; i++)
		scanf("%d",&A[i]);
}
int cb(int val)
{
	int i,step;
	for (step=1; step<=n; step<<=1);
	for (i=0; step; step>>=1)
		if (i+step<=n && A[i+step]<=val)
			i+=step;
	return i;
}
void solve()
{
	scanf("%d",&m);
	int i,tip,x,poz,poz2;
	for (i=1; i<=m; i++)
	{
		scanf("%d%d",&tip,&x);
		poz=cb(x);
		if (tip==0)
		{
			if (A[poz]==x)
				printf("%d\n",poz);
			else
				printf("-1\n");
		}
		if (tip==1)
			printf("%d\n",poz);
		if (tip==2)
		{
			poz2=cb(x-1)+1;
			if (A[poz]==x)
				printf("%d\n",poz2);
			else
				printf("%d\n",poz+1);
		}
	}
}
int main()
{
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	read();
	solve();
	return 0;
}