Cod sursa(job #2869820)

Utilizator Stefan_BircaBirca Stefan Stefan_Birca Data 11 martie 2022 21:00:15
Problema Cautare binara Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, a[100005];

int CB(int x)
{
    int st = 1, dr = n, mij, p = -1;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (a[mij] >= x)
        {
            st = mij + 1;
            if (a[mij] == x) p = mij;
        }
        else dr = mij - 1;
    }
    return p;
}

int CB_st(int x)
{
    int st = 1, dr = n, mij, p = -1;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (a[mij] <= x)
        {
            st = mij + 1;
            p = mij;
        }
        else dr = mij - 1;
    }
    return p;
}

int CB_dr(int x)
{
    int st = 1, dr = n, mij, p = -1;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (a[mij] >= x)
        {
            dr = mij - 1;
            p = mij;
        }
        else st = mij + 1;
    }
    return p;
}

int main()
{

    int m, i, task;
    fin >> n;
    for (i = 1; i <= n; i++)
        fin >> a[i];
    fin >> m;
    while (m--)
    {
        fin >> task >> i;
        if (task == 0) fout << CB(i) << "\n";
        else if (task == 1) fout << CB_st(i) << "\n";
        else fout << CB_dr(i) << "\n";
    }
    fin.close();
    fout.close();

    return 0;
}