Cod sursa(job #2815194)

Utilizator Luca_Miscocilucainfoarena Luca_Miscoci Data 9 decembrie 2021 11:44:48
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#define NMAX 10000
using namespace std;

int v[NMAX + 1];

int main(){

  ifstream fin ("cautbin.in");
  ofstream fout ("cautbin.out");

  int n, query, op, pas, st , dr, x;

  fin >> n;
  for (int i = 0; i < n; i++)
    fin >> v[i];

  fin >> query;

  dr = 1 << 17;
  for (int j = 0;j < query; j++){
    fin >> op >> x;
    pas = dr;
    st = 0;
    if (op == 0){
      while (pas > 0){
        if (st + pas < n && v[st + pas] <= x)
          st += pas;
        pas >>= 1;
      }
      if ( v[st] == x )
        fout << st + 1 << "\n";
      else
        fout << "-1\n";
    }
    else if ( op == 1 ){
      while (pas > 0){
        if (st + pas < n && v[st + pas] <= x )
          st += pas;
        pas >>= 1;
      }

      fout << st + 1 << "\n";
    }
    else {
      while (pas > 0){
        if ( st + pas < n && v[st + pas] < x )
          st += pas;
        pas >>= 1;
      }
      if (v[st] >= x)
        fout << st + 1 << "\n";
      else
        fout <<  st + 2 << "\n";

    }
  }
  return 0;
}