Cod sursa(job #2074005)

Utilizator VarticeanNicolae Varticean Varticean Data 23 noiembrie 2017 22:56:50
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int a[100005],n,m;
int caut0 ( int st, int dr, int x )
{
     int mid, save = -1;
     while(st <= dr)
     {
          mid = ( st+dr ) /2;
          if ( x >= a[mid] ) st = mid +1; else dr = mid -1;
          if( a[mid] == x ) save = mid ;
     }
     return save;
}
int caut1( int st, int dr, int x)
{
     int mid, save;
     while ( st <= dr )
     {
          mid =( st+dr )/2;
          if(  x >= a[mid] ) st = mid +1; else dr = mid-1;
          if( x >= a[mid] ) save = mid ;
     }
     return save;
}
int caut2( int st, int dr, int x)
{
     int mid, save ;
     while( st<=dr )
     {
          mid = ( st+dr) /2;
          if( x > a[mid] ) st = mid+1; else dr = mid-1;
          if( x <= a[mid] ) save =mid;
     }
     return save;
}
int main()
{
     in >> n ;
     for(int i=1; i<=n; i++) in >> a[i];
     int x,y;
     in >>m;
     for(int i=1; i<=m; i++)
     {
        in >> y >> x;
        if( !y ) out << caut0( 1,n,x)  << '\n';
        if( y == 1 ) out << caut1(1,n,x) <<'\n';
        if( y == 2 ) out << caut2(1,n,x) << '\n';
     }
    return 0;
}