Cod sursa(job #536532)

Utilizator nightwish0031Vlad Radu Cristian nightwish0031 Data 18 februarie 2011 19:06:24
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<cstdio>
const int N=100001;
int x[N];

int binary_search1(int value,int n)
{
	int step,i;
	for (step=1;step<=n;step<<=1);
	for (i=0;step;step>>=1)
		if (i+step<=n && x[i+step]<=value)
			i+=step;
	return i;
}

int binary_search2(int value,int n)
{
	int step,i;
	for (step=1;step<=n;step<<=1);
	for (i=n;step;step>>=1)
		if (i-step>0 && x[i-step]>=value)
			i-=step;
	return i;
}
int main()
{
	int i,n,m,res,tip,value;
	
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	
	scanf("%d",&n);
	for (i=1;i<=n;++i)
		scanf("%d",&x[i]);
	
	scanf("%d",&m);
	for (;m;--m)
	{
		scanf("%d %d",&tip,&value);
		if (tip<2)
		{
			res=binary_search1(value,n);
			if (!tip &&x [res]!=value) printf("-1\n");
			else printf("%d\n",res);
			continue;
		}
		
		printf("%d\n",binary_search2(value,n));
		
		
	}

	return 0;
}