Cod sursa(job #1193973)

Utilizator Andrei66Andrei Rusu Andrei66 Data 2 iunie 2014 16:20:02
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#define VAL 100001
using namespace std;

int x[VAL],n,m,i,j,q1,q2,p,pma=0,pmin=-1,pma2=0,p2,p3,k;

int tip0(int q2)
{  
  int s=1,d=n,mij;

  while (s<=d){
    mij=(s+d)/2;
    if (q2==x[mij]) 
      break;
    if (q2<x[mij])
      d=mij-1;
    else
      s=mij+1;
  }
  if (q2!=x[mij])
    return -1;
  while (x[mij]==q2)
      mij++;  
  return mij-1;
}

int tip1(int q2)
{
  int s=1,d=n,mij;
  while (s<=d){
    mij=(s+d)/2;
    if (q2==x[mij])
      break;
    if (q2<mij)
      d=mij-1;
    else
      s=mij+1;
  }
  while (q2>=x[mij] && mij<n)
     mij++;
  while (q2<x[mij])
     mij--;
  return mij; 
}

int tip2(int q2)
{ 
  int pmin=-1;
  for (j=1;j<=n;++j)
    if (x[j]>=q2){
       pmin=j;
       break;
    }
  return pmin;
}

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

  f>>n;
  for (i=1;i<=n;++i)
    f>>x[i];
  f>>m;
  for (i=1;i<=m;i++){
    f>>q1>>q2;
  
    if (q1==0)
      g<<tip0(q2);
    if (q1==1)
      g<<tip1(q2);
    if (q1==2)
      g<<tip2(q2);    
    g<<"\n";
  }

  return 0;
}