Cod sursa(job #1264843)

Utilizator TudoseSanzianaTudose Sanziana TudoseSanziana Data 16 noiembrie 2014 13:20:03
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>
using namespace std;
int v[1005];
int bs3(int st,int dr,int val)
{
    int med,last=-1;
    while(st<=dr)
    {
        med=dr-(dr-st)/2;
        if(v[med]<=val)
        {
            last=med;
            st=med+1;
        }
        else dr=med-1;
    }
    return last;
}
int bs2(int st,int dr,int val)
{
    int med,last=-1;
    while(st<=dr)
    {
        med=dr-(dr-st)/2;
        if(v[med]>=val)
        {
            last=med;
            dr=med-1;
        }
        else st=med+1;
    }
    return last;
}
int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    int n,m,x,i,op;
    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",&op,&x);
        if(op==0)
        {
            op=bs3(1,n,x);
            if(op>0 && v[op]==x)
                printf("%d\n",op);
            else printf("-1");
        }
        if(op==1)
        {
            op=bs3(1,n,x);
            printf("%d\n",op);
        }
        if(op==2)
        {
            op=bs2(1,n,x);
            printf("%d\n",op);
        }
    }
    return 0;
}