Cod sursa(job #1886252)

Utilizator Ioana_AndreeaCristescu Ioana Ioana_Andreea Data 20 februarie 2017 19:45:37
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
#include <fstream>
using namespace std;

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

const int NMax = 100005;
int N,M;
int X[NMax];

void Read()
{
  fin >> N;
  for(int i = 1; i <= N; ++i)
      fin >> X[i];
}

int BSearch1(int Value)
{
  int Left = 1, Right = N;
  int Sol = -1;
  while(Left <= Right)
    {
      int Mid = (Left + Right) / 2;
      if(X[Mid] == Value)
        {
          Sol = Mid;
          Left = Mid + 1;
        }
      else
        if(X[Mid] < Value)
          {
            Right = Mid - 1;
          }
        else
          {
            Left = Mid + 1;
          }
    }

  return Sol;
}

int BSearch2(int Value)
{
  int Left = 1, Right = N;
  int Sol = -1;
  while(Left <= Right)
    {
      int Mid = (Left + Right) / 2;
      if(X[Mid] <= Value)
        {
          Sol = Mid;
          Left = Mid + 1;
        }
      else
        Right = Mid - 1;
    }

  return Sol;
}

int BSearch3(int Value)
{
  int Left = 1, Right = N;
  int Sol = -1;
  while(Left <= Right)
    {
      int Mid = (Left + Right) / 2;
      if(X[Mid] >= Value)
        {
          Sol = Mid;
          Right = Mid - 1;
        }
      else
        Left = Mid + 1;
    }

  return Sol;
}

void SolveandPrint()
{
  fin >> M;
  while(M--)
  {
    int op,x;
    fin >> op >> x;
    if(op == 0)
      fout << BSearch1(x)<< "\n";
    if(op == 1)
      fout << BSearch2(x)<< "\n";
    if(op == 2)
      fout << BSearch3(x)<< "\n";
  }

}

int main()
{
    Read();
    SolveandPrint();
    return 0;
}