Cod sursa(job #2857890)

Utilizator LORDENVraja Luca LORDEN Data 26 februarie 2022 15:43:45
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int a[100001];
int n;

int LowerBound(int x)
{
    int l = 1, r = n+1, mid;
    while(l < r)
    {
        mid = (l + r)/2;
        if( a[mid] >= x)
            r = mid;
        else
            l = mid + 1;
    }
    return r;
}
int UpperBound(int x)
{
    int l = 1, r = n+1, mid;
    while(l < r)
    {
        mid = (l + r)/2;
        if( a[mid] > x)
            r = mid;
        else
            l = mid + 1;
    }
    return r;
}

int main()
{
    in >> n;
    for (int i=1; i<=n; i++)
        in >> a[i];
    sort (a+1, a+n+1);
    int q;
    in >> q;
    while (q--){
        int op, x;
        in >> op >> x;
        if (op == 0){
            int poz = UpperBound(x)-1;
            if (a[poz] == x)
                out << poz;
            else
                out << -1;
        }
        else if (op == 1){
            int poz = UpperBound(x)-1;
            out << poz;
        }
        else{
            int poz = LowerBound(x);
            out << poz;
        }
        out << '\n';
    }
    return 0;
}