Cod sursa(job #1022680)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 5 noiembrie 2013 20:49:16
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
using namespace std;

ifstream is("cautbin.in");
ofstream os("cautbin.out");

int n,a[100001],m,aux1,aux2;

void Read();
int BinarySearch(int x,int q);

int main()
{
    Read();
    for ( int i = 1; i <= m; i++ )
    {
        is >> aux1 >> aux2;
        os << BinarySearch(aux2,aux1) << '\n';

    }
    return 0;
}

void Read()
{
    is >> n;
    for ( int i = 1; i <= n; ++i )
    is >> a[i];
    is >> m;
}

int BinarySearch(int x,int q)
{
    int m;
    int p = 1; int u = n;
    if ( q == 0)
    {
        while ( p <= u )
        {
            m = (p+u)/2;
            if ( a[m] <= x )
            p = m+1;
            else
            u = m-1;
        }
        m = (p+u)/2;
    if ( a[m] > x )
        m--;
    if ( a[m] == x )
        return m;
    return -1;
    }
    if ( q == 1 )
    {
        while (p < u)
        {
            m = (p + u) / 2;
            if (a[m] <= x)
            p = m + 1;
            else
            u = m;
        }
    m = (p + u) / 2;
    if (a[m] > x)
    m--;
    return m;
    }

    if ( q == 2)
    {
        while (p < u)
        {
            m = (p + u) / 2;
            if (a[m] < x)
            p = m + 1;
            else
            u = m;
        }
    m = (p + u) / 2;
    if (a[m] < x)
        m++;
    return m;
    }

}