Cod sursa(job #826143)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 30 noiembrie 2012 09:19:43
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <vector>

inline unsigned bs_lessoreq_max(unsigned what, const std::vector<unsigned> &where);

int main(){
    std::ifstream fin("cautbin.in");
    std::ofstream fout("cautbin.out");
    unsigned N;
    fin>>N;
    std::vector<unsigned> sir(N);
    for(unsigned i=0;i<N;++i) fin>>sir[i];
    fin>>N;
    for(unsigned i=0;i<N;++i){
        char c;
        unsigned x;
        fin>>c>>x;
        int temp;
        switch(c){
            case '0': temp=bs_lessoreq_max(x,sir);
                      fout<<(sir[temp]==x?temp+1:-1)<<'\n';
                      break;
            case '1': fout<<bs_lessoreq_max(x,sir)+1<<'\n'; break;
            case '2': fout<<bs_lessoreq_max(x,sir)+2<<'\n';
        }
    }
}

inline unsigned bs_lessoreq_max(unsigned what, const std::vector<unsigned> &where){
    unsigned pos=0,step=1;
    for(;step<=where.size();step<<=1); step>>=1;
    for(;step;step>>=1)
        if(where[pos|step]<=what) pos|=step;
    return pos;
}