Cod sursa(job #2231374)

Utilizator CiobaCatalinCioba Catalin CiobaCatalin Data 13 august 2018 23:17:35
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <fstream>
#include <vector>

using namespace std;

int cautbin0(vector<int> &v, int x)
{
  int left, right, middle;

  left = 0;
  right = v.size();

  while (right - left > 1)
  {
    middle = left + (right - left) / 2;

    if (v[middle] <= x)
    {
      left = middle;
    }
    else
    {
      right = middle;
    }
  }
  if (v[left] == x)
  {
    return left + 1;
  }
  return -1;
}

int cautbin1(vector<int> &v, int x)
{
  int left, right, middle;

  left = 0;
  right = v.size();

  while (right - left > 1)
  {
    middle = left + (right - left) / 2;

    if (v[middle] <= x)
    {
      left = middle;
    }
    else
    {
      right = middle;
    }
  }
  return left + 1;
}

int cautbin2(vector<int> &v, int x)
{
  int left, right, middle;

  left = 0;
  right = v.size();

  while (right - left > 1)
  {
    middle = left + (right - left) / 2;

    if (v[middle] >= x)
    {
      right = middle;
    }
    else
    {
      left = middle;
    }
  }
  return right + 1;
}

int main()
{
  ifstream in;
  ofstream out;

  in.open("cautbin.in");
  out.open("cautbin.out");

  int n;
  in >> n;
  vector<int> v(n);

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

  int q;
  in >> q;

  int type, x;
  for (int i = 0; i < q; ++i)
  {
    in >> type >> x;

    switch (type)
    {
    case 0:
      out << cautbin0(v, x) << '\n';
      break;
    case 1:
      out << cautbin1(v, x) << '\n';
      break;
    case 2:
      out << cautbin2(v, x) << '\n';
      break;
    }
  }

  in.close();
  out.close();
}