Cod sursa(job #2251760)

Utilizator mihaipriboimihailucapriboi mihaipriboi Data 1 octombrie 2018 22:11:24
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.26 kb
#include <stdio.h>
#include <stdlib.h>

int v[100001], n;

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

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

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