Cod sursa(job #2831707)

Utilizator Chris.sCristian Chris.s Data 11 ianuarie 2022 21:46:48
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.07 kb
#include <iostream>

using namespace std;

int v[100005];

int cautare_binara0(int nr, int n)
{
      int st = 1, dr = n, mij, rez = -1;
      bool ok = false;
      while (st <= dr)
      {
            mij = (st + dr) / 2;
            if (v[mij] == nr)
            {
                  rez = mij;
                  ok = true;
                  st = mij + 1;
            }
            if (v[mij] > nr)
                  dr = mij - 1;
            else
                  st = mij + 1;
      }

      if (ok == true)
            return rez;
      else
            return -1;
}


int cautare_binara1(int nr, int n)
{
      int st = 1, dr = n, mij, rez = -1;
      bool ok = false;
      while (st <= dr)
      {
            mij = (st + dr) / 2;
            if (v[mij] <= nr)
            {
                  rez = mij;
                  ok = true;
                  st = mij + 1;
            }
            if (v[mij] > nr)
                  dr = mij - 1;
      }

      if (ok == true)
            return rez;
      else
            return -1;
}


int cautare_binara2(int nr, int n)
{
      int st = 1, dr = n, mij, rez = -1;
      bool ok = false;
      while (st <= dr)
      {
            mij = (st + dr) / 2;
            if (v[mij] >= nr)
            {
                  rez = mij;
                  ok = true;
                  dr = mij - 1;
            }
            if (v[mij] < nr)
                  st = mij + 1;
      }

      if (ok == true)
            return rez;
      else
            return -1;
}

int main()
{
      int n, m, nr_test, nr_c;
      cin >> n;
      for(int i = 1; i <= n; ++i)   
            cin >> v[i];
      cin >> m;
      for(int i = 1; i <= m; ++i)
      {
            cin >> nr_test >> nr_c;
            if(nr_test == 0)
                  cout << cautare_binara0(nr_c, n) << '\n';
            if(nr_test == 1)
                  cout << cautare_binara1(nr_c, n) << '\n';
            if(nr_test == 2)
                  cout << cautare_binara2(nr_c, n) << '\n';
      }
      return 0;
}