Cod sursa(job #2512783)

Utilizator vali_27Bojici Valentin vali_27 Data 21 decembrie 2019 16:57:23
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.64 kb
#include <bits/stdc++.h>
#define NMAX 100001
using namespace std;

//ifstream f ("cautbin.in");
//ofstream g ("cautbin.out");

int v[NMAX],n,m;

int cauta0(int st,int dr,int val)
{
    if(st > dr)
    {
        st--;
        return v[st] == val?st:-1;
    }
    else
    {
        int mid = st + (dr - st)/2;
        if (val >= v[mid])cauta0(mid+1,dr,val);
        else return cauta0(st,mid-1,val);
    }
}

int cauta1(int st,int dr,int val)
{
    if(st > dr)
    {
        st--;
        return st;
    }
    else
    {
        int mid = st + (dr - st)/2;
        if(val >= v[mid])return cauta1(mid+1,dr,val);
        else return cauta1(st,mid-1,val);
    }
}

int cauta2(int st,int dr,int val)
{
    if(st > dr)
    {
        return st;
    }
    else
    {
        int mid = st + (dr - st)/2;
        if(val <= v[mid])return cauta2(st,mid-1,val);
        else return cauta2(mid+1,dr,val); // if (val > v[mid] )
    }
}


void citire()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);

    scanf("%d",&n);
    for(int i=1;i<=n;++i)scanf("%d",&v[i]);

    int a,b;
    scanf("%d",&m);
    for(int i=1;i<=m;++i)
    {
        scanf("%d %d",&a,&b);
        if(a == 0)
        {
            //cout << cauta0(1,n,b);
            printf("%d\n",cauta0(1,n,b));
        }
        else
        if(a == 1)
        {
          //  cout << cauta1(1,n,b);
            printf("%d\n",cauta1(1,n,b));
        }
        else
        {
//            cout << cauta2(1,n,b);
            printf("%d\n",cauta2(1,n,b));
        }
    }
}

int main()
{
    citire();

    return 0;
}