Cod sursa(job #3226878)

Utilizator EricDimiC. Eric-Dimitrie EricDimi Data 23 aprilie 2024 10:30:06
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.69 kb
#include <iostream>
#include <fstream>
#define NMAX 100001

using namespace std;

#ifdef LOCAL
    ifstream f("a.in");
    ofstream g("a.out");
#else
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
#endif // LOCAL

int N, M, a[NMAX], op, x, i;
int st, dr, mij;

int main()
{
    f >> N;
    for (i = 1; i <= N; i++)
        f >> a[i];
    f >> M;
    for (i = 1; i <= M; i++)
    {
        f >> op >> x;
        if (op == 0)
        {
            st = 1; dr = N;
            while (st < dr)
            {
                mij = st + (dr-st)/2;
                if (a[mij] <= x)
                    st = mij+1;
                else dr = mij-1;
            }
            mij = st + (dr-st)/2;
            if (a[mij] > x) mij--;
            if (a[mij] == x) g << mij;
            else g << "-1";
            g << "\n";
        }
        else if (op == 1)
        {
            st = 1;
            dr = N;
            while (st < dr)
            {
                mij = st + (dr-st)/2;
                if (a[mij] <= x)
                    st = mij+1;
                else dr = mij;
            }
            mij = st + (dr-st)/2;
            if (a[mij] > x) mij--;
            g << mij << "\n";
        }
        else if (op == 2)
        {
            st = 1;
            dr = N;
            while (st < dr)
            {
                mij = st + (dr-st)/2;
                if (a[mij] < x)
                    st = mij+1;
                else dr = mij;
            }
            mij = st + (dr-st)/2;
            if (a[mij] < x) mij++;
            g << mij << "\n";
        }
    }
    f.close();
    g.close();
    return 0;
}
/**
1 3 3 3 5
*/