Cod sursa(job #2075026)

Utilizator CyborgSquirrelJardan Andrei CyborgSquirrel Data 25 noiembrie 2017 10:50:11
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>

using namespace std;

int valslen;
int vals[100041];

int binSearch(int n, int lg, int t)
{
    int pos = 0;
    for(; lg > 0; lg >>= 1){
        if(vals[pos + lg] <= n && pos + lg <= valslen){
            pos += lg;
        }
    }
    if((pos == 0 || vals[pos] != n) && t == 0){
        return -1;
    }
    return pos;
}

int invBinSearch(int n, int lg)
{
    int pos = lg;
    for(; lg > 0; lg >>= 1){
        if(vals[pos - lg] >= n && pos - lg > 0){
            pos -= lg;
        }
    }
    return pos;
}

int main()
{
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");
    int m, t, v;
    int lg;
    fin >> valslen;
    for(lg = 1; lg <= valslen; lg <<= 1);
    for(int i = 1; i <= valslen; i++){
        fin >> vals[i];
    }
    fin >> m;
    for(int i = 1; i <= m; i++){
        fin >> t >> v;
        if(t == 2){
            fout << invBinSearch(v, lg);
        }else{
            fout << binSearch(v, lg, t);
        }
        fout << "\n";
    }
    return 0;
}