Cod sursa(job #798800)

Utilizator cocoshilaClaudiu cocoshila Data 17 octombrie 2012 12:31:17
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>
int const N=100001;
int n,m,x,y,v[N];

int caut0(int x)
{
    int i=0,pas=1<<16;
    for(i=0;pas!=0;pas>>=1)
        if(i+pas<=n && v[i+pas]==x)
            i+=pas;
    if(i==0) return -1;
    else return i;
}

int caut1(int x)
{
    int i=0,pas=1<<16;
    for(i=0;pas!=0;pas>>=1)
        if(i+pas<=n && v[i+pas]<=x)
            i+=pas;
    return i;
}

int caut2(int x)
{
    int i=0,pas=1<<16;
    for(i=0;pas!=0;pas>>=1)
        if(i+pas<=n && v[i+pas]<x)
            i+=pas;
    return i+1;
}

int main()
{
    int i;
    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",&y,&x);
        if(y==0) printf("%d\n",caut0(x));
        if(y==1) printf("%d\n",caut1(x));
        if(y==2) printf("%d\n",caut2(x));
    }
    return 0;
}