Cod sursa(job #1278889)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 29 noiembrie 2014 15:01:31
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

#define inf ((1<<30)-1+(1<<30))

using namespace std;

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

int n,m,v[100100],op,x;

int f (int val)
{
    int lo = 0, hi = n+1;

    while (hi - lo > 1)
    {
        int mid = (lo + hi)/2;

        if (v[mid] >= val)
          hi = mid;
        else lo = mid;
    }

    return hi;
}

int main()
{
    fin>>n;

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

    v[0] = -inf;
    v[n+1] = inf;

    fin>>m;

    for (int i=1; i<=m; ++i)
    {
        fin>>op>>x;

        if (op == 0)
        {
            int p = f(x+1);
            --p;
            if (v[p] == x)
            {
                fout<<p;
            }
            else fout<<-1;
        }
        else if (op == 1)
        {
            int p = f (x+1);
            --p;
            fout<<p;
        }
        else if (op == 2)
        {
            int p = f(x);
            fout<<p;
        }
        fout<<"\n";
    }
}