Cod sursa(job #2565428)

Utilizator marius004scarlat marius marius004 Data 2 martie 2020 14:13:25
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <fstream>

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

const int NMAX = 100005;
int n,v[NMAX],t,operatie,x;

int query0(int left,int right,int value){

    int sol = -1;

    while(left <= right){

        int mid = (left + right) / 2;

        if(v[mid] == value){
            left = mid + 1;
            sol = mid;
            continue;
        }

        if(v[mid] < value)
            left = mid + 1;
        else
            right = mid - 1;
    }

    return sol;
}

int query1(int left,int right,int value){

    int sol = -1;

    while(left <= right){

        int mid = (left + right) / 2;

        if(v[mid] <= value){
            sol = mid;
            left = mid + 1;
        }else {
            right = mid - 1;
        }
    }

    return sol;
}

int query2(int left,int right,int value){

    int sol = -1;

    while(left <= right){

        int mid = (left + right) / 2;

        if(v[mid] >= value){
            right = mid - 1;
            sol = mid;
        }else{
            left = mid + 1;
        }
    }

    return sol;
}

int main(){

    f >> n;

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

    f >> t;

    while(t--){

        f >> operatie >> x;

        if(operatie == 0)
            g << query0(1,n,x) << '\n';
        else if(operatie == 1)
            g << query1(1,n,x) << '\n';
        else
            g << query2(1,n,x) << '\n';
    }

    return 0;
}