Cod sursa(job #2967462)

Utilizator 222cezarCezar Stilpeanu 222cezar Data 19 ianuarie 2023 17:40:50
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int n, a[100001], m, q, xq;

int cb0(int x)
{
  int st = 0, dr = n - 1, rez = -1;
  while(st <= dr)
  {
    int mid = (st + dr) / 2;
    if(a[mid] <= x)
    {
      if(a[mid] == x) rez = mid;
      st = mid + 1;
    }
    else dr = mid - 1;
  }
  return rez;
}

int cb1(int x)
{
  int st = 0, dr = n - 1, rez = -1;
  while(st <= dr)
  {
    int mid = (st + dr) / 2;
    if(a[mid] <= x)
    {
      rez = mid;
      st = mid + 1;
    }
    else
    {
      dr = mid - 1;
    }
  }
  return rez;
}

int cb2(int x)
{
  int st = 0, dr = n - 1, rez = - 1;
  while(st <= dr)
  {
    int mid = (st + dr) / 2;
    if(a[mid] >= x)
    {
      rez = mid;
      dr = mid - 1;
    }
    else
    {
      st = mid + 1;
    }
  }
  return rez;
}

int main()
{
  cin >> n;
  for(int i = 0; i < n; i++)
  {
    cin >> a[i];
  }

  cin >> m;
  while(m--)
  {
    cin >> q >> xq;
    if(q == 0) cout << cb0(xq) + 1 << '\n';
    else if(q == 1) cout << cb1(xq) + 1 << '\n';
    else if(q == 2) cout << cb2(xq) + 1 << '\n';
  }
}