Cod sursa(job #2786858)

Utilizator TghicaGhica Tudor Tghica Data 21 octombrie 2021 19:30:20
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>

using namespace std;

int v[100001];

int main() {
  ifstream cin("cautbin.in");
  ofstream cout("cautbin.out");
  int n, m, i, p, x, put2, cop, poz, last;
  cin>>n;
  for( i = 1; i <= n; i++ ) {
    cin>>v[i];
  }
  cop = 1;
  while( cop <= n ) {
    cop *= 2;
  }
  cop /= 2;
  cin>>m;
  while( m-- ) {
    cin>>p>>x;
    put2 = cop;
    poz = 0;
    last = -1;
    if( p == 0 ) {
      while( put2 ) {
        if( ( poz | put2 ) <= n ) {
          if( v[poz | put2] < x ) {
            poz |= put2;
          }
        }
        if( ( poz | put2 ) <= n ) {
          if( v[poz | put2] == x ) {
            poz |= put2;
            last = poz;
          }
        }

        put2 /= 2;
      }
      cout<<last;
    } else if( p == 1 ) {
      while( put2 ) {
        if( ( poz | put2 ) <= n ) {
          if( v[poz | put2] <= x ) {
            poz |= put2;
            last = poz;
          }
        }

        put2 /= 2;
      }
      cout<<last;
    } else {
      while( put2 ) {
        if( ( poz | put2 ) <= n) {
          if( v[poz | put2] < x ) {
            poz |= put2;
            last = poz;
          }
        }
        put2 /= 2;
      }
      cout<<last + 1;
    }
    cout<<"\n";
  }
  return 0;
}