Cod sursa(job #2967456)

Utilizator 222cezarCezar Stilpeanu 222cezar Data 19 ianuarie 2023 17:37:19
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 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) dr = mid - 1;
    else if(a[mid] < x) st = mid - 1;
    else rez = mid, st = 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;
    switch(q)
    {
    case 0:
      cout << cb0(xq) + 1 << '\n';
      break;
    case 1:
      cout << cb1(xq) + 1 << '\n';
      break;
    case 2:
      cout << cb2(xq) + 1 << '\n';
      break;
    }
  }
}