Cod sursa(job #2073807)

Utilizator edi9876Negescu Eduard Mihai edi9876 Data 23 noiembrie 2017 18:58:58
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>

using namespace std;

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

const int NL = 100000, L = 16;
int n, m, v[NL];

int p01(int x)
{
    int r = 0;
    int pas = 1 << L;
    while(pas != 0)
    {
        if(r + pas <= n && v[r + pas]<=x)
        {
            r += pas;
        }
        pas /= 2;
    }
    if(v[r] != x)
    {
        r = -1;
    }
    return r;
}

int p2(int x)
{
    int r = 0;
    int pas =1 << L;
    while(pas != 0)
    {
        if(r + pas <= n && !(v[r + pas] >= x))
        {
            r += pas;
        }
        pas /= 2;
    }
    r++;
    return r;
}

int main()
{
    in >> n;
    for(int i = 1; i <= n; i++)
    {
        in >> v[i];
    }
    in >> m;

    for(int i = 1; i <= m; i++)
    {
        int c, x;
        in >> c >> x;

        if(c == 0)
        {
            int r = p01(x);
            if(v[r] != x)
            {
                r = -1;
            }
            out << r << '\n';
        }

        if(c == 1)
        {
            out << p01(x) << '\n';
        }

        if(c == 2)
        {
            out << p2(x) << '\n';
        }
    }
    return 0;
}