Cod sursa(job #1687354)

Utilizator sabinnituSabin Nitu sabinnitu Data 12 aprilie 2016 20:02:27
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>

using namespace std;

const int N = 100001;
const int L = 16;

int v[N], n;

int caut0(int x)
{
    int i = 0, pas = 1 << L;
    while (pas != 0)
    {
        //proprietatea este: v[i] <= x
        if (i + pas <= n && v[i + pas] <= x)
            i += pas;
        pas /= 2;
    }

    return i;
}

int caut1(int x)
{
    int i = 0, pas = 1 << L;
    while (pas !=0)
    {
        // proprietatea este: v[i] >= x
        if (i + pas <= n && v[i + pas] <= x )
            i += pas;
        pas /= 2;
    }

    return i;
}

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

int main()
{
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");
    int i, j, tip, x, m;
    in >> n;
    for (i=1; i<=n; i++)
    {
        in >> v[i];
    }
    in >> m;
    for(j=1; j<=m; j++)
    {
        in >> tip >> x;
        if (tip == 0)
            out << caut0(x) << "\n";
        if (tip == 1)
            out << caut1(x) << "\n";
        if (tip == 2)
            out << caut2(x) << "\n";
    }

    return 0;
}