Cod sursa(job #3248403)

Utilizator radu._.21Radu Pelea radu._.21 Data 11 octombrie 2024 16:53:57
Problema Cautare binara Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>



using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100001],n;
void solve0(int x){
    int st=1,dr=n;
    int poz = -1;
    /// cea mai mare pozitie pe care se afla x sau minus 1
    while(st<=dr){
        int mij = (st+dr)/2;
        if(v[mij]==x)
            poz=mij;
        if(v[mij]>=x)
            st=mij+1;
        else
            dr=mij-1;
    }
    fout<<poz<<'\n';
}
void solve1(int x){
     //cea mai mare pozitie pe care se afla un
     //element cu valoarea mai mica sau egala cu x in sir.
    int poz = 0;
    int st=1,dr=n;
    while(st<=dr){
        int mij = (st+dr)/2;
        if(v[mij]<=x)
            poz=mij,st=mij+1;
        else
            dr=mij-1;
    }
    fout<<poz<<'\n';
}
void solve2(int x){
    int poz = 1000000000,st=1,dr=n;
    while(st<=dr){
        int mij = (st+dr)/2;
        if(v[mij]>=x)
            poz = min(poz,mij),dr=mij-1;
        else
            st = mij+1;
    }
    if(poz==1000000000)
        fout<< -1<<'\n';
    fout<< poz<<'\n';
}
int main(){
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    int q; fin>>q;
    while(q--){
        int cer,x;
        fin>>cer>>x;
        if(cer==0)
            solve0(x);
        else if(cer==1)
            solve1(x);
        else

            solve2(x);
    }


    return 0;
}