Cod sursa(job #2269469)

Utilizator ralfd123Amariei Andrei ralfd123 Data 25 octombrie 2018 23:45:13
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");

int n,v[100010],m,t,x;

int binarysearch_1(int a,int b,int val)
{   int m=0;
    while( a <= b )
    {   int m=(a+b)>>1;
        if( val < v[m] ) b=m-1;
        else a=m+1;
    }

    m=a+(b-a)/2;

    while( val < v[m] ) m--;
    if( val == v[m] ) return m;
    return -1;
}

int binarysearch_2(int p, int u, int key)
{   int m, n = u;

    while (p < u)
    {   m = (p + u) / 2;
        if (v[m] <= key) p = m + 1;
        else u = m;
    }

    m = (p + u) / 2;

    if (v[m] > key) -- m;
    return m;
}

int main()
{   f>>n; for(int i=1;i<=n;++i) f>>v[i];
    f>>m;
    while( m )
    {   f>>t>>x;
        if( t == 0 ) g<<binarysearch_1(1,n,x)<<'\n';
        else if( t == 1 )
        {   if( binarysearch_1(1,n,x) != -1 ) g<<binarysearch_1<<'\n';
            else g<<binarysearch_2(1,n,x)<<'\n';
        }
        m--;
    }

g.close();
return 0;
}