Cod sursa(job #2507572)

Utilizator MichaelXcXCiuciulete Mihai MichaelXcX Data 10 decembrie 2019 15:31:10
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include <fstream>

using namespace std;

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

const int NMAX = 100005;
int N, M, V[NMAX];

int binSrc1(int st, int dr, int x)
{
    int sol = -1;

    while(st <= dr) {
        int mid = st + (dr - st) / 2;

        if(V[mid] == x) {
            sol = mid;
            st = mid + 1;
        }
        else if(V[mid] > x)
            dr = mid - 1;

        else
            st = mid + 1;
    }
    return sol;
}

int binSrc2(int st, int dr, int x)
{
    int sol = -1;

    while(st <= dr) {
        int mid = st + (dr - st) / 2;

        if(V[mid] == x) {
            sol = mid;
            st = mid + 1;
        }
        else if(V[mid] > x)
            dr = mid - 1;

        else {
            sol = mid;
            st = mid + 1;
        }
    }
    return sol;
}

int binSrc3(int st, int dr, int x)
{
    int sol = -1;

    while(st <= dr) {
        int mid = st + (dr - st) / 2;

        if(V[mid] == x) {
            sol = mid;
            dr = mid - 1;
        }
        else if(V[mid] > x) {
            sol = mid;
            dr = mid - 1;
        }

        else
            st = mid + 1;
    }
    return sol;
}

int main()
{
    fin >> N;
    for(int i = 1; i <= N; i++)
        fin >> V[i];

    fin >> M;
    for(int i = 0; i < M; i++) {
        int nrCrt, x;
        fin >> nrCrt >> x;

        if(nrCrt == 0)
            fout << binSrc1(1, N, x) << "\n";

        if(nrCrt == 1)
            fout << binSrc2(1, N, x) << "\n";

        if(nrCrt == 2)
            fout << binSrc3(1, N, x) << "\n";
    }
}