Cod sursa(job #2782812)

Utilizator Alex_AlionteAlionte Alexandru Alex_Alionte Data 13 octombrie 2021 09:48:42
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.69 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ( "cautbin.in" );

ofstream fout ( "cautbin.out" );

int n, m, c, x;

int a [ 100005 ];

void Cin ( int v [ 100005 ], int &n, int &m ) {
    fin >> n;
    for ( int i = 1; i <= n; ++ i ) {
        fin >> v [ i ];
    }
    fin >> m;
}

int xzero ( int x ) {
    int poz;
    poz = -1;
    int mij, st, dr;
    st = 1;
    dr = n;
    while ( st <= dr ) {
        mij = ( st + dr ) / 2;
        if ( x < a [ mij ] ) {
            dr = mij - 1;
        }
        else {
            if ( x == a [ mij ] ) {
                poz = mij;
            }
            st = mij + 1;
        }
    }
    return poz;
}

int xunu ( int x ) {
    int poz;
    poz = -1;
    int mij, st, dr;
    st = 1;
    dr = n;
    while ( st <= dr ) {
        mij = ( st + dr ) / 2;
        if ( x >= a [ mij ] ) {
            poz = mij;
            st = mij + 1;
        }
        else {
            dr = mij - 1;
        }
    }
    return poz;
}

int xdoi ( int x ) {
    int poz;
    poz = -1;
    int mij, st, dr;
    st = 1;
    dr = n;
    while ( st <= dr ) {
        mij = ( st + dr ) / 2;
        if ( x <= a [ mij ] ) {
            poz = mij;
            dr = mij - 1;
        }
        else {
            st = mij + 1;
        }
    }
    return poz;
}

int main() {
    Cin ( a, n, m );
    for ( int i = 1; i <= m; ++ i ) {
        fin >> c >> x;
        if ( c == 0 ) {
            fout << xzero ( x ) << '\n';
        }
        if ( c == 1 ) {
            fout << xunu ( x ) << '\n';
        }
        if ( c == 2 ) {
            fout << xdoi ( x ) << '\n';
        }
    }
    return 0;
}