Cod sursa(job #2721789)

Utilizator Victor2006Nicola Victor-Teodor Victor2006 Data 12 martie 2021 11:34:44
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#define N 100000
#define L 20

using namespace std;

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

int v[N + 1];
int n;

int pb01( int v[], int n, int e ) {
    int poz = 1, put = 1 << L;
    while ( put ) {
        if ( poz + put <= n && v[poz + put] <= e )
            poz += put;
        put /= 2;
    }
    return poz;
}

int pb2( int v[], int n, int e ) {
    int poz = 1, put = 1 << L;
    while ( put ) {
        if ( poz + put <= n && v[poz + put] < e )
            poz += put;
        put /= 2;
    }
    return poz + 1;
}

int main() {
    int q, t, e, poz;
    fin >> n;
    for ( int i = 1; i <= n; i ++ )
        fin >> v[i];
    fin >> q;
    for ( int i = 1; i <= q; i ++ ) {
        fin >> t >> e;
        switch ( t ) {
        case 0:
            poz = pb01( v, n, e );
            if ( v[poz] == e )
                fout << poz << "\n";
            else
                fout << "-1\n";
            break;
        case 1:
            fout << pb01( v, n, e ) << "\n";
            break;
        case 2:
            fout << pb2( v, n, e ) << "\n";
            break;
        default:
            break;
        }
    }
    return 0;
}