Cod sursa(job #440948)

Utilizator OdinSandu Bogdan-Mihai Odin Data 12 aprilie 2010 18:08:04
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<stdio.h>
int type,x,n,m,i,T,v[100005];
int binary_search(int val)
{
	int j,s;
	for(s=1;s<=n;s<<=1);
	for(j=0;s;s>>=1)
		if(j+s<=n && v[j+s]<=val)
			j+=s;
	return j;
}
int type1(int val)
{
	int c=binary_search(val);
	return c;
}
int type2(int val)
{
	int c=binary_search(val);
	while(v[c]==val)c--;
	return c+1;
}
int main()
{
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&v[i]);
	scanf("%d",&m);
	for(i=1;i<=m;i++)
	{
		scanf("%d %d",&type,&x);
		if(type==0)
		{
			T=binary_search(x);
			if(v[T]==x)printf("%d\n",T);
			else printf("-1\n");
		}
		if(type==1)
			printf("%d\n",type1(x));
		if(type==2)
			printf("%d\n",type2(x));
	}
	return 0;
}