Cod sursa(job #2991153)

Utilizator etohirseCristi Cretu etohirse Data 9 martie 2023 10:23:41
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

using VI = vector<int>;

unsigned n, m;
VI v;

void read();
void solve();

int main() {
  read();
  solve();
  return 0;
}

void read() {
  fin >> n;
  v = VI(n + 1);
 
  for (unsigned i = 1; i <= n; ++i) {
   fin >> v[i];
  } 
  
  fin >> m;
}


void solve() {
  int op, x;
  while (m--) {
    fin >> op >> x;
    
    if (op == 0) {
      int lb = 1, rb = n, ans = -1;
      
      while (lb <= rb) {
        int mb = lb + (rb - lb) / 2;
        
        if (v[mb] <= x) {
          ans = mb;
          lb = mb + 1;
        } else {
          rb = mb - 1;
        }
      }
      
      fout << ans << '\n';
      
    } else if (op == 1) {
      
      int lb = 1, rb = n, ans = -1;
      
      while (lb <= rb) {
        int mb = lb + (rb - lb) / 2;
        
        if (v[mb] <= x) {
          ans = mb;
          lb = mb + 1;
        } else {
          rb = mb - 1;
        }
      }
      
      fout << ans << '\n';
      
    } else if (op == 2) {
      int lb = 1, rb = n, ans = -1;
      
      while (lb <= rb) {
        int mb = lb + (rb - lb) / 2;
        
        if (v[mb] < x) {
          lb = mb + 1;
        } else {
          rb = mb - 1;
          ans = mb;
        }
      }
      
      fout << ans << '\n';
    }
  }
}