Cod sursa(job #3226876)

Utilizator EricDimiC. Eric-Dimitrie EricDimi Data 23 aprilie 2024 10:25:00
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.62 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)/2;
                if (a[mij] <= x)
                    st = mij+1;
                else dr = mij;
            }
            mij = (st+dr)/2;
            if (a[mij] > x) mij--;
            g << (a[mij] == x ? mij : -1) << "\n";
        }
        else if (op == 1)
        {
            st = 1;
            dr = N;
            while (st < dr)
            {
                mij = (st+dr)/2;
                if (a[mij] == x)
                    st = mij+1;
                else dr = mij;
            }
            mij = (st+dr)/2;
            if (a[mij] > x) mij--;
            g << mij << "\n";
        }
        else if (op == 2)
        {
            st = 1;
            dr = N;
            while (st < dr)
            {
                mij = (st+dr)/2;
                if (a[mij] < x)
                    st = mij+1;
                else dr = mij;
            }
            mij = (st+dr)/2;
            if (a[mij] < x) mij++;
            g << mij << "\n";
        }
    }
    f.close();
    g.close();
    return 0;
}
/**
1 3 3 3 5
*/