Cod sursa(job #2122454)

Utilizator AronZekAron Jinga AronZek Data 5 februarie 2018 09:32:10
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>

#define NMax 100005

using namespace std;

    int N, M, v[NMax], logN;

int main(){
    int tip, x, i, lg;
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");

    fin >> N;
        for(i = 1; i <= N; i++)
            fin >> v[i];

    for(logN = 1; logN <= N; logN <<= 1);

    fin >> M;

    for(; M; M--){
        fin >> tip >> x;

        if( tip < 2){
            for(lg = logN , i = 0; lg; lg >>= 1)
                if(i + lg <= N && v[i + lg] <= x)
                    i += lg;

            if(!tip && v[i] != x)
                fout << "-1" << endl;
            else fout << i << endl;

            continue;
        }

        for(lg = logN, i = N; lg; lg >>= 1)
            if(i - lg > 0 && v[i - lg] >= x)
                i-= lg;
            fout << i << endl;
    }
return 0;
}