Cod sursa(job #2412202)

Utilizator AlexNeaguAlexandru AlexNeagu Data 21 aprilie 2019 19:44:23
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
#define NMAX 100005
int N,X,M,Q,POZ;
int V[NMAX];
void Cautare_Binara_0(int st, int dr)
{
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if (V[mij]>X)
            dr=mij-1;
            else if (V[mij]<X)
            st=mij+1;
            else
            {
                POZ=mij;
                st=mij+1;
            }
        }
        if (st==dr&&V[st]==X)
        POZ=st;
}
void Cautare_Binara_1(int st, int dr)
{
    while (st<=dr)
    {
        int mij=(st+dr)/2;
        if (V[mij]>X)
            dr=mij-1;
        else
        {
            POZ=mij;
            st=mij+1;
        }
    }
    if (st==dr&&V[st]<=X)
        POZ=st;
}
void Cautare_Binara_2(int st, int dr)
{
    while (st<=dr)
    {
        int mij=(st+dr)/2;
        if (V[mij]<X)
            st=mij+1;
        else
        {
            POZ=mij;
            dr=mij-1;
        }
    }
    if (st==dr&&V[dr]>=X)
        POZ=st;
}
int main()
{
    fin>>N;
    for (int i=1; i<=N; i++)
        fin>>V[i];
        fin>>M;
        for (int i=1; i<=M; i++)
        {
            fin>>Q>>X;
            POZ=-1;
            if (!Q)
                Cautare_Binara_0(1,N);
                if (Q==1)
                    Cautare_Binara_1(1,N);
                if (Q==2)
                    Cautare_Binara_2(1,N);
                fout<<POZ<<"\n";
        }
    return 0;
}