Cod sursa(job #3308464)

Utilizator RegeleOu3433Calin V. Dragos Andrei RegeleOu3433 Data 25 august 2025 12:35:21
Problema Cautare binara Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.77 kb
#include <stdio.h>
#define MAXN 100000

int v[MAXN];
int main () {
    FILE *fin , *fout;
    int n , i , m , tip , x , st , dr , mij;
    fin = fopen ( "cautbin.in" , "r" );
    fscanf ( fin , "%d" , &n );
    for ( i = 0 ; i < n ; i++ )
        fscanf ( fin , "%d" , &v[i] );
    fscanf ( fin , "%d" , &m );
    fout = fopen ( "cautbin.out" , "w" );
    for ( i = 0 ; i < m ; i++ ) {
        fscanf ( fin , "%d%d" , &tip , &x );
        switch ( tip ) {
            case 0:
                st = 0;
                dr = n;
                while ( st < dr ) {
                    mij = ( st + dr ) / 2;
                    if ( x + 1 > v[mij] )
                        st = mij + 1;
                    else
                        dr = mij;
                }
                if ( st > 0 && v[st - 1] == x )
                    fprintf ( fout , "%d\n" , st );
                else
                    fprintf ( fout , "-1\n" );
                break;
            case 1:
                st = 0;
                dr = n;
                while ( st < dr ) {
                    mij = ( st + dr ) / 2;
                    if ( x + 1 > v[mij] )
                        st = mij + 1;
                    else
                        dr = mij;
                }
                fprintf ( fout , "%d\n" , st );
                break;
            default:
                st = 0;
                dr = n - 1;
                while ( st < dr ) {
                    mij = ( st + dr ) / 2;
                    if ( x > v[mij] )
                        st = mij + 1;
                    else
                        dr = mij;
                }
                fprintf ( fout , "%d\n" , st + 1 );
        }
    }
    fclose ( fin );
    fclose ( fout );
    return 0;
}