Cod sursa(job #3038274)

Utilizator radu._.21Radu Pelea radu._.21 Data 27 martie 2023 10:15:19
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,v[100001];
int cautare0(int x){
    int st=1,dr=n;
    int poz=0;
    while(st<=dr){
        int mij=(st+dr)/2;
        if(v[mij]<=x)
            st=mij+1;
        if(v[mij]>x)
            dr=mij-1;
        if(v[mij]==x)
            poz=max(poz,mij);
    }
    if(poz==0)
        return -1;
    else
        return poz;
}
int cautare1(int x){
    int st=1,dr=n;
    int poz=0;
    while(st<=dr){
        int mij=(st+dr)/2;
        if(v[mij]<=x)
            poz=max(poz,mij),st=mij+1;
        else
            dr=mij-1;
    }
    return poz;

}
int cautare2(int x){
    int st=1,dr=n;
    int poz=n+1;
    while(st<=dr){
        int mij=(st+dr)/2;
        if(v[mij]>=x)
            poz=min(poz,mij),dr=mij-1;
        else
            st=mij+1;
    }
    return poz;
}
int main(){
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    int q;
    fin>>q;
    while(q--){
        int cer;
        fin>>cer;
        int x; fin>>x;
        if(cer==0){
            fout<<cautare0(x)<<'\n';
        }
        else if(cer==1)
            fout<<cautare1(x)<<'\n';
        else
            fout<<cautare2(x)<<'\n';
    }
    return 0;
}