Cod sursa(job #2353266)

Utilizator AndreibatmanAndrei Croitoriu Andreibatman Data 24 februarie 2019 09:34:12
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>
#define NMAX 100001

using namespace std;

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

int i , a[NMAX] , n , m , tip , numar , poz;

int cautare(int x){
  int mij = 0 , st = 1 , dr = n , poz = -1;
  while(st <= dr)
  {
      mij = (dr - st)/ 2 + st;
      if(a[mij] == x) poz = mij , st = mij + 1;
      else if(a[mij] < x)st = mij + 1;
      else dr = mij - 1;
  }
  return poz;
}

int cautare_2(int x){
  int mij = 0 , st = 1 , dr = n , poz = -1;
  while(st <= dr)
  {
      mij = (dr - st)/ 2 + st;
      if(a[mij] <= x) poz = mij , st = mij + 1;
      else dr = mij - 1;
  }
  return poz;
}

int cautare_3(int x){
  int mij = 0 , st = 1 , dr = n , poz = -1;
  while(st <= dr)
  {
      mij = (dr - st)/ 2 + st;
      if(a[mij] >= x) poz = mij , dr = mij - 1;
      else if(a[mij] < x)st = mij + 1;
  }
  return poz;
}

int main()
{
   f>>n;
   for(i=1;i<=n;i++)f>>a[i];
   f>>m;
   for(i=1;i<=m;i++)
   {
       f>>tip>>numar;
       if(tip == 0)
       {
           poz = cautare(numar);
           g<<poz<<'\n';
       }
       else if(tip == 1)
      {
          poz  = cautare_2(numar);
          g<<poz<<'\n';
      }
      else {
         poz = cautare_3(numar);
         g<<poz<<'\n';
      }
   }
    return 0;
}