Cod sursa(job #1235222)

Utilizator afkidStancioiu Nicu Razvan afkid Data 29 septembrie 2014 00:30:19
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <cstdio>

using namespace std;
const char InFile[]="cautbin.in";
const char OutFile[]="cautbin.out";
const int DIMN=100010;

int n,m,v[DIMN];

int binarySearch0(int a,int b,int x)
{
    int mid=(a+b)/2;
    if(a>=b)
        return mid;
    else if(x<v[mid])
        return binarySearch0(a,mid-1,x);
    else if(x==v[(a+b)/2])
        return (a+b)/2;
    else return binarySearch0(mid+1,b,x);
}

int binarySearch1(int a,int b,int x)
{
    int mid=(a+b)/2;
    if(a>=b)
        return mid;
    else if(x<=v[mid])
        return binarySearch1(a,mid-1,x);
    else return binarySearch1(mid+1,b,x);
}

int binarySearch2(int a,int b,int x)
{
    int mid=(a+b)/2;
    if(a>=b)
        return mid;
    else if(x<v[mid])
        return binarySearch1(a,mid-1,x);
    else return binarySearch1(mid+1,b,x);
}

int main()
{
    int a,b,t;
    freopen(InFile,"r",stdin);
    freopen(OutFile,"w",stdout);

    scanf("%d",&n);
    for(int i=1;i<=n;++i)
        scanf("%d",&v[i]);
    scanf("%d",&m);
    for(int i=1;i<=m;++i)
    {
        scanf("%d %d",&a,&b);
        if(a==0)
        {
            int k=binarySearch0(1,n,b);
            if(b==v[k])
                printf("%d\n",k);
            else printf("-1\n");
        }
        if(a==1)
        {
            printf("%d\n",binarySearch1(1,n,b));
        }
        if(a==2)
        {
            printf("%d\n",binarySearch2(1,n,b));
        }
    }

    return 0;
}