Cod sursa(job #2515501)

Utilizator vali_27Bojici Valentin vali_27 Data 28 decembrie 2019 18:38:48
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
#define NMAX 32000
using namespace  std;

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

int v[NMAX],n;

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

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

int main()
{
    f >> n;
    for(int i=1;i<=n;++i)f>> v[i];
    int m,t,x;
    f >> m;
    while(m--)
    {
        f >> t >> x;
        switch(t)
        {
            case 0 :
                {
                    int poz = cautaDr(1,n,x);
                    if(v[poz] == x)
                        g << poz << '\n';
                    else
                        g << -1 << '\n';
                }
            break;
            case 1 : g << cautaDr(1,n,x) << '\n';
            break;
            case 2 : g << cautaSt(1,n,x) << '\n';
        }
    }

    return 0;
}