Cod sursa(job #2623044)

Utilizator mihai_radulescuMihai Radulescu mihai_radulescu Data 2 iunie 2020 15:19:26
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <fstream>
using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");
int a[100001], mij, n, i, x, opt, m, p, q;

void cautare(int x)
{
    p = 1;
    q = n;
    while(p <= q)
    {
        mij = (p + q) / 2;
        if(a[mij] == x)
            break;
        else if(a[mij] > x)
            q = mij - 1;
        else if(a[mij] < x)
            p = mij + 1;
    }
}
int main()
{
    f >> n;
    for(i = 1; i <= n; ++i)
        f >> a[i];
    f >> m;
    for(i = 1; i <= m; ++i)
    {
        f >> opt >> x;
        if(opt == 0)
        {
            cautare(x);
            if(a[mij] == x)
            {
                while(a[mij + 1] == x)
                    mij++;
                g << mij << '\n';
            }
            else
                g << -1 << '\n';
        }

        if(opt == 1)
        {
            cautare(x);
            if(a[mij] == x)
            {
                while(a[mij + 1] == x)
                    mij++;
            }
            else if(a[mij] > x)
                mij--;
            g << mij << '\n';
        }
        if(opt == 2)
        {
            cautare(x);
            if(a[mij] == x)
            {
                while(a[mij - 1] == a[mij])
                    mij--;
            }
            else if(a[mij] < x)
                mij++;
            g << mij << '\n';
        }
    }
    return 0;
}