Cod sursa(job #3342754)

Utilizator tux_personTudor Oancea tux_person Data 25 februarie 2026 16:24:09
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
using namespace std;

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

const int N = 1e5;
int v[N+1];

int cbeq (int n, int x){
    int st = 1, dr = n, rez = -1;

    while (st<=dr){
        int m = (st+dr)/2;

        if (v[m]<x){
            st = m+1;
        }
        else if (v[m]>x){
            dr = m-1;
        }
        else{
            rez = m;
            st = m+1;
        }
    }
    return rez;
}

int cblow (int n, int x){
    int st = 1, dr = n, rez = st-1;

    while (st<=dr){
        int m = (st+dr)/2;

        if (v[m]<=x){
            rez = m;
            st = m+1;
        }
        else{
            dr = m-1;
        }
    }
    return rez;
}

int cbhigh(int n, int x){
    int st = 1, dr = n, rez = dr+1;

    while (st<=dr){
        int m = (st+dr)/2;

        if (v[m]>=x){
            rez = m;
            dr = m-1;
        }
        else{
            st = m+1;
        }
    }

    return rez;
}


int main(){
    int n;
    fin>>n;

    for (int i = 1; i<=n; i++){
        fin>>v[i];
    }

    int q;
    fin>>q;

    for (int i = 1; i<=q; i++){
        int type, x;
        fin>>type>>x;

        if (type==0)
            fout<<cbeq(n,x);
        else if (type==1)
            fout<<cblow(n,x);
        else fout<<cbhigh(n,x);

        fout<<'\n';
    }
}