Cod sursa(job #2568207)

Utilizator gogu5Gogu Vrea la ONI gogu5 Data 3 martie 2020 21:24:51
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>
#define L 17

int v[100000];

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

int main() {
    FILE *fin, *fout;
    int n, m, i, c, x, a;
    fin = fopen( "cautbin.in", "r" );
    fout = fopen( "cautbin.out", "w" );
    fscanf( fin, "%d", &n );
    for ( i = 0; i < n; i++ )
        fscanf( fin, "%d", &v[i] );
    fscanf( fin, "%d", &m );
    for ( i = 0; i < m; i++ ) {
        fscanf( fin, "%d%d", &c, &x );
        a = cautareBinara( x, n );
        if ( c == 0 ) {
            if ( v[a] == x )
                fprintf( fout, "%d\n", a + 1 );
            else
                fprintf( fout, "-1\n" );
        } else if ( c == 1 ) {
            fprintf( fout, "%d\n", a + 1 );
        } else if ( c == 2 ) {
            while ( a >= 0 && v[a] >= x )
                a--;
            a++;
            fprintf( fout, "%d\n", a + 1 );
        }
    }
    fclose( fin );
    fclose( fout );
    return 0;
}