Cod sursa(job #1992415)

Utilizator LucaSeriSeritan Luca LucaSeri Data 20 iunie 2017 14:10:56
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100001];

int main(){
    int n;
    f >> n;
    for(int i = 0; i < n; i++){
        f >> v[i];
    }
    int m;
    f >> m;
    for(int i = 0, a, b; i < m; i++){
        f >> a >> b;
        int step = 1;
        for(;step <= n; step <<= 1);
        int best = 0;
        for(; step > 0; step >>= 1){
            if(best + step < n && v[best + step] <= b){
                best += step;
            }
        }
        if(a == 0){
            if(v[best] == b) g << best + 1;
            else g << "-1";
            g << "\n";
        }
        if(a == 1){
            g << best + 1 << "\n";
        }
        if(a == 2){
            step = 1;
            for(;step <= n; step <<= 1);
            best = 0;
            for(; step > 0; step >>= 1){
                if(best + step < n && v[best + step] < b){
                    best += step;
                }
            }
            g << best + 2 << "\n";
        }
    }

    return 0;
}