Cod sursa(job #929785)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 27 martie 2013 11:36:16
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include<stdio.h>
int n,a[100007],x,m,poz;
int cb(int val)
{
    int st,dr,med,last=-1;
    st=1;
    dr=n;
    while (st <= dr)
    {
        med=(st + dr) >> 1;
        if (val >= a[med])
        {
            last=med;
            st=med + 1;
        }
        else
            dr=med - 1;
    }
    return last;
}
int cb2(int val)
{
    int st,dr,med,last=-1;
    st=1;
    dr=n;
    while (st <= dr)
    {
        med=(st + dr)/2;
        if (val <= a[med])
        {
            last=med;
            dr=med - 1;
        }
        else
            st=med + 1;
    }
    return last;
}
int main()
{
    int tip;
    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" , &m);
    for (int i=1 ; i<=m ; ++i)
    {
        scanf("%d %d" , &tip , &x);
        poz=cb(x);
        if (tip == 0)
          if(a[poz] == x)
            printf("%d\n" , poz);
          else
            printf("-1\n");
        if (tip == 1)
            printf("%d\n" , poz);
        if (tip == 2)
            printf("%d\n" , cb2(x));
    }
}