Cod sursa(job #2427828)

Utilizator stefan_cucosCucos Stefan stefan_cucos Data 2 iunie 2019 13:35:26
Problema Cautare binara Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>

using namespace std;

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

long long n,m,i,p,x;
int v[100001];

int cb0(int x,int st,int dr)
{
    int Sol = -1;
    while(st <= dr)
    {
        int Mij = (st+dr) / 2;
        if(v[Mij] == x)
        {
            Sol=Mij;
            break;
        }
        if(v[Mij] > x)
            dr = Mij - 1;
        if(v[Mij] < x)
            st = Mij + 1;
    }
    return Sol;
}

int main()
{
    in>>n;
    for(i=1; i<=n; i++)
        in>>v[i];
    in>>m;
    for(i=1; i<=m; i++)
    {
        in>>p>>x;
        if(p==0)
            out<<cb0(x,1,n)<<endl;
        if(p==1)
        {
            while(x)
            {
                if(cb0(x,1,n)==-1)
                    x--;
                else
                {
                    out<<cb0(x,1,n)<<endl;
                    break;
                }
            }
        }
        if(p==2)
        {
            while(x)
            {
                if(cb0(x,1,n)==-1)
                    x++;
                else
                {
                    out<<cb0(x,1,n)<<endl;
                    break;
                }
            }
        }
    }
    return 0;
}