Cod sursa(job #2062269)

Utilizator Andrei_RAndrei Roceanu Andrei_R Data 10 noiembrie 2017 10:13:43
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int v[100001], pas, r, n;

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

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

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

int main()
{
    int i, x, m, tip;
    f >> n;
    for ( i = 1; i <= n; i++ ) {
        f >> v[i];
    }
    f >> m;
    for ( i = 0; i < m; i++ ) {
        f >> tip >> x;
        if ( tip == 0 )
            g << cb0(x);
        else if ( tip == 1 )
            g << cb1(x);
        else
            g << cb2(x);
        g << "\n";
    }
    f.close();
    g.close();
    return 0;
}