Cod sursa(job #2725946)

Utilizator Victor24Vasiesiu Victor Victor24 Data 19 martie 2021 21:48:52
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.58 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f ("cautbin.in");
ofstream g ("cautbin.out");

void biggest_idx( int x, vector<int>& v ){
    int ans = -1;

    int l = 0 , r = v.size() - 1, mij = l + (r-l)/2;

    while ( l <= r ) {
        mij = l + (r-l)/2;
        if ( v[mij] == x ){
            ans = mij;
            l = mij + 1;
        }
        else if ( v[mij] < x )
            l = mij + 1;
        else
            r = mij - 1;
    }
    if ( ans != -1 )
        g << ans+1 << '\n';
    else g << -1 << '\n';

}

void lowest_idx( int x, vector<int>& v ){
    int ans = -1;

    int l = 0 , r = v.size() - 1, mij = l + (r-l)/2;

    while ( l <= r ) {
        mij = l + (r-l)/2;
        if ( v[mij] <= x ){
            ans = mij;
            l = mij + 1;
        }
        else
            r = mij - 1;
    }

    g << ans+1 << '\n';

}

void upper_idx( int x, vector<int>& v ){
    int ans = -1;

    int l = 0 , r = v.size() - 1, mij = l + (r-l)/2;

    while ( l <= r ) {
        mij = l + (r-l)/2;
        if ( v[mij] >= x ){
            ans = mij;
            r = mij - 1;
        }
        else
            l = mij + 1;
    }

    g << ans+1 << '\n';

}


int main()
{
    int n,m,op,x;

    f>>n;
    vector<int> v(n,0);

    for ( int i = 0 ; i < n ; i++ )
        f>>v[i];

    f>>m;

    for ( int i = 0 ; i < m ; i++ ){
        f>>op>>x;
        if ( op == 0 )
            biggest_idx(x,v);
        else if ( op == 1 )
            lowest_idx(x,v);
        else upper_idx(x,v);
    }

    return 0;
}