Cod sursa(job #3174797)

Utilizator CezarLupuLupu Cezar Andrei CezarLupu Data 25 noiembrie 2023 10:15:40
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.99 kb
#include <fstream>

using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int main()
{
    int n,v[100001],m,x,c,st,dr,mij;
    bool gasit=false;
    f>>n;
    for(int i=1; i<=n; i++)
    {
        f>>v[i];


    }

    f>>m;
    for(int i=1; i<=m; i++)
    {
        f>>c>>x;
        gasit=false;
        if(c==0)
        {
            st=0;
            dr=n;


            while(st!=dr)
            {
                mij=(st+dr)/2;
                if(v[x]<=mij)
                    dr=mij;
                else st=mij;
                if(x==v[mij])
                {

                    while(v[mij]==v[mij+1])
                    {

                        mij++;
                    }

                    g<<mij<<'\n';
                    st=dr;
                    gasit=true;
                }
            }

            if(gasit==false)
                g<<-1<<'\n';
        }
        else if(c==1)
        {
            st=0;
            dr=n;


            while(st!=dr)
            {
                mij=(st+dr)/2;
                if(v[x]<=mij)
                    dr=mij;
                else st=mij;
                if(x<=v[mij])
                {

                    while(v[mij]==v[mij+1])
                    {

                        mij++;
                    }

                    g<<mij<<'\n';
                    st=dr;

                }
            }

        }
        else
        {

            st=0;
            dr=n;


            while(st!=dr)
            {
                mij=(st+dr)/2;
                if(v[x]<=mij)
                    dr=mij;
                else st=mij;
                if(x>=v[mij])
                {

                    while(v[mij]==v[mij+1])
                    {

                        mij--;
                    }

                    g<<mij+1<<'\n';
                    st=dr;

                }
            }


        }
    }
    return 0;
}