Cod sursa(job #251596)

Utilizator crawlerPuni Andrei Paul crawler Data 2 februarie 2009 23:03:03
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>

int a[100100], n,m;

int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    
    int n,m;
    
    scanf("%d", &n);
    
    for (int i=1;i<=n;++i) scanf("%d", &a[i]);
    
    scanf("%d", &m);    
    
    for (int i=1;i<=m;++i)
    {
        int op,nr;
        scanf("%d%d", &op,&nr);
        
        if (op == 0)    
        {
            int ret = 0;
            for (int x=1<<16;x>0;x/=2) if(ret+x <= n)
            if (a[ret+x] <= nr) ret+=x;
            if (a[ret] != nr) printf("-1\n"); else printf("%d\n", ret);
        }        
        if (op == 1)    
        {
            int ret = 0;
            for (int x=1<<17;x>0;x/=2) if(ret+x <= n)
            if (a[ret+x] <= nr) ret+=x;
            while(a[ret+1] <= nr) ++ret;                           
            printf("%d\n", ret);
        }
        if (op == 2)    
        {
            int ret = 0;
            for (int x=1<<17;x>0;x/=2) if(ret+x <= n)
            if (a[ret+x] <= nr) ret+=x;
            while(a[ret] <= nr) ++ret;   
            printf("%d\n", ret);
        }
    }
    
    return 0;    
}