Cod sursa(job #2396832)

Utilizator ezioconnorVlad - Gabriel Iftimescu ezioconnor Data 3 aprilie 2019 21:04:11
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int v[100001];

int main()
{
    int n, m, c, val;
    in >> n;
    for (int i = 1; i <= n; ++i)
        in >> v[i];
    sort(v + 1, v + n + 1);
    in >> m;
    for (int q = 1; q <= m; ++q)
    {
        in >> c >> val;
        if (c == 0)
        {
            int lg, i;
            for (lg = 1; lg <= n; lg <<= 1);
            for (i = 1; lg; lg >>= 1)
            {
                if (i + lg <= n && v[i + lg] <= val)
                    i += lg;
            }
            if (v[i] != val)
                out << -1;
            else
                out << i;
        }
        else if (c == 1)
        {
            int lg, i;
            for (lg = 1; lg <= n; lg <<= 1);
            for (i = 1; lg; lg >>= 1)
            {
                if (i + lg <= n && v[i + lg] <= val)
                    i += lg;
            }
            if (v[i] > val)
                out << -1;
            else
                out << i;
        }
        else
        {
            int lg, i;
            for (lg = 1; lg <= n; lg <<= 1);
            for (i = n; lg; lg >>= 1)
            {
                if  (i - lg >= 1 && v[i - lg] >= val)
                    i -= lg;
            }
            if (v[i] < val)
                out << -1;
            else
                out << i;
        }
        out << '\n';
    }
    return 0;
}