Cod sursa(job #2509127)

Utilizator euyoTukanul euyo Data 13 decembrie 2019 20:25:48
Problema Cautare binara Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <stdio.h>

int v[100000];

int main() {
  FILE *fin = fopen( "cautbin.in", "r" );
  FILE *fout = fopen( "cautbin.out", "w" );
  int n, m, q, e, i, dr, st, mij;

  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", &q, &e );
    if ( q == 0 ) {
      st = 0;
      dr = n;
      while ( dr - st > 1 ) {
        mij = (st + dr) / 2;
        if ( v[mij] > e ) {
          dr = mij;
        } else {
          st = mij;
        }
      }
      if ( e == v[st] ) {
        fprintf( fout, "%d\n", st + 1 );
      } else {
        fprintf( fout, "-1\n" );
      }
    } else if ( q == 1 ) {
      st = 0;
      dr = n;
      while ( dr - st > 1 ) {
        mij = (st + dr) / 2;
        if ( v[mij] > e ) {
          dr = mij;
        } else {
          st = mij;
        }
      }
      fprintf( fout, "%d\n", st + 1 );
    } else if ( q == 2 ) {
      st = -1;
      dr = n - 1;
      while ( dr - st > 1 ) {
        mij = (st + dr) / 2;
        if ( v[mij] >= e ) {
          dr = mij;
        } else {
          st = mij;
        }
      }
      if ( v[0] == e ) {
        fprintf( fout, "1" );
      } else {
        fprintf( fout, "%d\n", dr + 1 );
      }
    }
  }
  fclose( fin );
  fclose( fout );
  return 0;
}