Cod sursa(job #2902098)

Utilizator Frant_IoanaFrant Ioana Frant_Ioana Data 15 mai 2022 16:32:32
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <bits/stdc++.h>
using namespace std;

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

int n, m, v[100001], x;
char c;

int cb2(int x){
    int poz = -1, st = 1, dr = n, mij;

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

        if(v[mij] >= x)
            dr = mij - 1, poz = mij;
        else if(v[mij] < x)
            st = mij + 1;
    }

    return poz;
}

int cb1(int x){
    int poz = -1, st = 1, dr = n, mij;

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

        if(v[mij] > x)
            dr = mij - 1;
        
        else if(v[mij] <= x)
            st = mij + 1, poz = mij;
    }

    return poz;
}

int cb0(int x){
    int poz = -1, st = 1, dr = n, mij;

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

        if(v[mij] <= x){
            st = mij + 1;
            if(v[mij] == x)
                poz = mij;
        }

        else if(v[mij] > x)
            dr = mij - 1;
    }

    return poz;
}


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

    fin >> m;
    for(int i = 1; i <= m; i++){
        fin >> c >> x;

        if(c == '0')
            fout << cb0(x) << '\n';
        else if(c == '1')
            fout << cb1(x) << '\n';
        else
            fout << cb2(x) << '\n';
    }
}