Cod sursa(job #1323046)

Utilizator claudiu.gatinaFMI Claudiu Gatina claudiu.gatina Data 20 ianuarie 2015 16:57:02
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>

int n,m,v[100001],op,x,y,r=1;

int c0(int a)
{
    int i,pas=r;
    for(i=0;pas;pas>>=1)
        if(v[i+pas]<=a && i+pas<=n)
            i+=pas;
    if(v[i]==a)
        return i;
    return -1;
}

int c1(int a)
{
    int i,pas=r;
    for(i=0;pas;pas>>=1)
        if(v[i+pas]<=a && i+pas<=n)
            i+=pas;
    return i;
}
int c2(int a)
{
    int i,pas=r;
    for(i=n;pas;pas>>=1)
        if(v[i-pas]>=a && i-pas>=1)
            i-=pas;
    if(v[i]==a)
        return i;
    return -1;
}

int main()
{
    int i;
    freopen("cautbin.in", "r", stdin);
   // freopen("cautbin.out", "w", stdout);
    scanf("%d ", &n);
    while(r<=n)
        r<<=1;
    r>>=1;
    for(i=1;i<=n;i++)
        scanf("%d ", &v[i]);
    scanf("%d ", &m);
    for(i=1;i<=m;i++)
    {
        scanf("%d %d ", &op, &x);
        if(op==0)
            y=c0(x);
        if(op==1)
            y=c1(x);
        if(op==2)
            y=c2(x);
        printf("%d\n", y);
    }
    return 0;
}