Cod sursa(job #1986268)

Utilizator ArctopusKacso Peter-Gabor Arctopus Data 28 mai 2017 13:46:36
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>

#define ll long long
#define pb push_back

using namespace std;

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


const int NLIM = 1e5 + 10;
int N, M;
int v[NLIM];

void f1( int x )
{
    int l = 0;
    int r = N - 1;
    while( l <= r )
    {
        int m = l + ( r - l ) / 2;

        if( v[m] > x )
            r = m - 1;
        else
            l = m + 1;

    }
    if( v[r] == x && r >= 0 )
        fout << r + 1 << "\n";
    else
        fout << -1 << "\n";
}

void f2( int x )
{
    int l = 0;
    int r = N - 1;

    while( l <= r )
    {
        int m = l + ( r - l ) / 2;

        if( v[m] > x )
            r = m - 1;
        else
            l = m + 1;
        //cout << l << " " << r << "\n";
       // getchar();
    }

    fout << r + 1 << "\n";
}

void f3( int x )
{
    int l = 0;
    int r = N - 1;

    while( l <= r )
    {
        int m = l + ( r - l ) / 2;

        if( v[m] >= x )
            r = m - 1;
        else
            l = m + 1;
        //cout << l << " " << r << "\n";
        //getchar();
    }

    fout << l + 1 << "\n";
}

int main()
{
    fin >> N;
    for( int i = 0; i < N; ++i )
        fin >> v[i];

    fin >> M;
    for( int i = 0; i < M; ++i )
    {
        int t, x;
        fin >> t >> x;
        if( t == 0 )
        {
            f1( x );
        }
        else if( t == 1 )
        {
            f2( x );
        }
        else
            f3( x );
    }

    return 0;
}