Cod sursa(job #2169169)

Utilizator HumikoPostu Alexandru Humiko Data 14 martie 2018 13:48:58
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>

using namespace std;

ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");

int v[100001];

int cautbin (int y, int low, int high, int key )
{
    while ( low <= high )
    {
        int mid = low + (high - low)/2;
        if ( y == 0 )
        {
            if ( v[mid] == key && ( v[mid+1] > key || mid == high ) )
                return mid;
        }
        else
        {
            if ( y == 1 )
            {
                if ( v[mid] <= key && ( v[mid+1] > key || mid == high ) )
                    return mid;
            }
            else
            {
                if ( v[mid] >= key && ( v[mid-1] < key || mid == high ) )
                    return mid;
            }
        }
        if ( y == 0 || y == 1 )
        {
            if ( v[mid] <= key )
                low = mid + 1;
            else
                high = mid - 1;
        }
        else
        {
            if ( v[mid] < key )
                low = mid + 1;
            else
                high = mid - 1;
        }
    }
    return -1;
}

int main()
{
    int n, m;
    fin>>n;
    for ( int i = 1; i <= n; ++i )
        fin>>v[i];
    fin>>m;
    while (m--)
    {
        int y, x;
        fin>>y>>x;
        fout<<cautbin(y, 1, n, x)<<'\n';

    }
}