Cod sursa(job #2062248)

Utilizator GhiciCineRazvan Dumitriu GhiciCine Data 10 noiembrie 2017 09:44:03
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#define MAXN 100000
#define L 16

using namespace std;

int v[MAXN + 5];

int main( ) {
  int n, m, i, r, pas, tip, x;

  freopen( "cautbin.in", "r", stdin );
  freopen( "cautbin.out", "w", stdout );

  scanf( "%d", &n );
  for( i = 1; i <= n; i++ )
    scanf( "%d", &v[i] );
  scanf( "%d", &m );
  for( i = 1; i <= m; i++ ) {
    scanf( "%d%d", &tip, &x );
    r = 0;
    pas = 1 << L;
    if( tip == 0 || tip == 1 ) {
      while( pas != 0 ) {
        if( r + pas <= n && v[r + pas] <= x )
          r += pas;
        pas /= 2;
      }
      if( tip == 0 ) {
        if( v[r] == x )
          printf( "%d\n", r );
        else
          printf( "-1\n" );
      }
      else
        printf( "%d\n", r );
    }
    else {
      while( pas != 0 ) {
        if( r + pas <= n && v[r + pas] < x )
          r += pas;
        pas /= 2;
      }
      printf( "%d\n", 1 + r );
    }
  }

  return 0;
}