Cod sursa(job #3360489)

Utilizator RegeleOu3433Calin V. Dragos Andrei RegeleOu3433 Data 14 iulie 2026 14:07:36
Problema Cautare binara Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.67 kb
#include <stdio.h>
#define MAXN 100000

int sir[MAXN];
int main () {
    FILE *fin , *fout;
    int n , m , i , tip , x , sts , drs , mijs;

    fin = fopen ( "cautbin.in" , "r" );
    fscanf ( fin , "%d" , &n );

    for ( i = 0 ; i < n ; i++ )
        fscanf ( fin , "%d" , &sir[i] );
    fscanf ( fin , "%d" , &m );
    fout = fopen ( "cautbin.out" , "w" );
    for ( i = 0 ; i < m ; i++ ) {
        fscanf ( fin , "%d%d" , &tip , &x );
        if ( tip == 0 ) {
            sts = 0;
            drs = n;
            while ( drs - sts > 1 ) {
                mijs = sts + ( drs - sts ) / 2;
                if ( sir[mijs] > x )
                    drs = mijs;
                else
                    sts = mijs;
            }
            if ( sir[sts] == x )
                fprintf ( fout , "%d" , sts + 1 );
            else
                fprintf ( fout , "-1" );
        } else if ( tip == 1 ) {
            sts = 0;
            drs = n;
            while ( drs - sts > 1 ) {
                mijs = sts + ( drs - sts ) / 2;
                if ( sir[mijs] > x )
                    drs = mijs;
                else
                    sts = mijs;
            }
            fprintf ( fout , "%d" , sts + 1 );
        } else {
            sts = -1;
            drs = n - 1;
            while ( drs - sts > 1 ) {
                mijs = sts +  ( drs - sts ) / 2;
                if ( sir[mijs] < x )
                    sts = mijs;
                else
                    drs = mijs;
            }
            fprintf ( fout , "%d" , drs + 1 );
        }
        fputc ( '\n' , fout );
    }
    fclose ( fin );
    fclose ( fout );
    return 0;
}