Cod sursa(job #1773454)

Utilizator MirceaTMircea Timpuriu MirceaT Data 7 octombrie 2016 21:12:18
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
using namespace std;
int n,v[100020],hi,lo,mid;
int up(int b)
{
     lo=1;
     hi=n;
            while(lo<=hi){

            mid=(hi+lo)/2;
            if(b>=v[mid])
            {
                lo=mid+1;
            }
            else
            {
                hi=mid-1;
            }
            }
            return hi;
}
int down(int b)
{

    lo=1;
                hi=n;
            while(lo<=hi){

            mid=(hi+lo)/2;
            if(b<=v[mid])
            {
                hi=mid-1;
            }
            else
            {
                lo=mid+1;
            }

            }
            return lo;
}
int main()
{
    int h,i,j,k,a,b;
    ifstream fin ("cautbin.in");
    ofstream fout ("cautbin.out");
    fin>>n;
    for(i=1;i<=n;++i)
    {
        fin>>v[i];
    }
    fin>>k;
    for(j=1;j<=k;++j)
    {
        fin>>a>>b;
       if(a==1)
       {
           fout<<up(b)<<endl;
       }
       else if(a==2)
       {
           fout<<down(b)<<endl;
       }
       else
       {
           h=up(b);
           if(v[h]==b)
           {
               fout<<h<<endl;
           }
           else
           {
               fout<<"-1"<<endl;
           }
       }


    }
}