Cod sursa(job #2346914)

Utilizator daria_stoianStoian Daria Alexandra daria_stoian Data 18 februarie 2019 11:22:05
Problema Cautare binara Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <stdio.h>
#include <stdlib.h>
#define L 16
#define N 100001

int v[N], n, m;

int main() {
    int r, pas, i, a, x;
    FILE *fin, *fout;
    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", &a, &x );
        if ( a == 0 ) {
            r = 0;
            pas = 1 << L;
            while ( pas != 0 ) {
                if ( r + pas <= n && v[r + pas] <= x ) {
                    r += pas;
                }
                pas /= 2;
            }
            if ( r == 0 || v[r] < x ) {
              r = -1;
            }
        }
        if ( a == 1 ) {
            r = 0;
            pas = 1 << L;
            while ( pas != 0 ) {
                if ( r + pas <= n && v[r + pas] <= x ) {
                    r += pas;
                }
                pas /= 2;
            }
        }
        if ( a == 2 ) {
            r = 0;
            pas = 1 << L;
            while ( pas != 0 ) {
                if ( r + pas <= n && v[r + pas] < x ) {
                    r += pas;
                }
                pas /= 2;
            }
            r ++;
        }
        fprintf( fout, "%d\n", r );
    }
    fclose( fin );
    fclose( fout );
    return 0;
}