Cod sursa(job #1257424)

Utilizator Andrei66Andrei Rusu Andrei66 Data 7 noiembrie 2014 18:59:15
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>

using namespace std;

int x[100001];

int cautbin0(int st,int dr,int nr)
{
  int mij,maxx=0;

  while (st<dr)
  {
    mij=(st+dr)/2;
    if (x[mij]==nr && mij>maxx)
      maxx=mij;
    if (nr<x[mij])
      dr=mij-1;
    else st=mij+1;
  }
  if (maxx!=0)
    return maxx;
  return -1;
}

int cautbin1(int st,int dr,int nr)
{
  int mij,maxx=0;

  while (st<dr)
  {
    mij=(st+dr)/2;
    if (x[mij]<=nr && mij>maxx)
      maxx=mij;
    if (nr<x[mij])
      dr=mij;
    else st=mij+1;
  }
  return maxx;
}

int cautbin2(int st,int dr,int nr)
{
  int mij;

  while (st<dr)
  {
    mij=(st+dr)/2;
    if (x[mij]<nr)
      st=mij+1;
    else dr=mij;
  }
  mij=(st+dr)/2;
  if (x[mij]<nr)
    ++mij;
  return mij;

}

int main()
{
  int n,i,nr,a,b;

  ifstream f("cautbin.in");
  ofstream g("cautbin.out");

  f>>n;

  for (i=1;i<=n;++i)
    f>>x[i];

  f>>nr;

  for(i=1;i<=nr;++i){
    f>>a>>b;
    if (a==0)
      g<<cautbin0(1,n,b)<<" ";
    if (a==1)
      g<<cautbin1(1,n,b)<<" ";
    if (a==2)
      g<<cautbin2(1,n,b)<<" ";
  }

    return 0;
}