Cod sursa(job #443551)

Utilizator IAmASuperCerealVictor Andrei IAmASuperCereal Data 17 aprilie 2010 14:15:44
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Tema 10D #1 Marime 0.86 kb
#include<stdio.h>
int n, a[100001];
int binary_search01(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;
}
int binary_search2(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+1;
}
void solve()
{
	int x,q;
	scanf("%d%d",&q,&x);
	if (q==0)
	{
		if(a[binary_search01(x)]!=x)
			printf("-1\n");
		else
			printf("%d\n",binary_search01(x));
    }
	if (q==1)
		printf("%d\n",binary_search01(x));
	if (q==2)
		printf("%d\n",binary_search2(x));
}
int main()
{
	int t;
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	scanf("%d",&t);
	for(int i=1;i<=t;i++)
		solve();
	
	return 0;
}