Cod sursa(job #2209179)

Utilizator Victoras2006Nicola Victor Teodor Victoras2006 Data 2 iunie 2018 09:33:51
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#define N 100000
#define L 16

using namespace std;

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

int v[N + 1], n;

int caut0( int x ) {
    int r = 0, pas = 1 << L;
    while ( pas ) {
        if ( r + pas <= n && v[r + pas] <= x )
            r += pas;
        pas /= 2;
    }
    if ( r == 0 || v[r] < x )
        r = -1;
    return r;
}
int caut1( int x ) {
    int r = 0, pas = 1 << L;
    while ( pas ) {
        if ( r + pas <= n && v[r + pas] <= x )
            r += pas;
        pas /= 2;
    }
    return r;
}
int caut2( int x ) {
    int r = 0, pas = 1 << L;
    while ( pas ) {
        if ( r + pas <= n && v[r + pas] < x )
            r += pas;
        pas /= 2;
    }
    r ++;
    return r;
}

int main() {
    fin >> n;
    for ( int i = 1; i <= n; i ++ )
        fin >> v[i];
    int m, rez, t, x;
    fin >> m;
    for ( int i = 1; i <= m; i ++ ) {
        fin >> t >> x;
        switch ( t ) {
        case 0:
            rez = caut0( x );
            break;
        case 1:
            rez = caut1( x );
            break;
        case 2:
            rez = caut2( x );
            break;
        }
        fout << rez << "\n";
    }
    return 0;
}