Cod sursa(job #1156963)

Utilizator theodor.moroianuTheodor Moroianu theodor.moroianu Data 28 martie 2014 10:11:18
Problema Cautare binara Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
using namespace std;
void f1(int x);
void f2(int x);
void f3(int x);
int n, v[100000];
long long p;
ofstream out("cautbin.out");
int main(){
    int m, q, cit;
    ifstream in("cautbin.in");
    in >> n;
    for (int i = 0; i < n; i++)
        in >> v[i];
    in >> m;
    for (int k = 1; k <= m; k++){
        in >> q >> cit;
        if (q == 0)
            f1(cit);
        else if (q == 1)
            f2(cit);
        else
            f3(cit);

    }
}
void f1(int x){
    int b = 0;
    int p = 1 << 16;
    while (p != 0){
        if (b + p<n&&v[b + p] <= x)
            b += p;
        p /= 2;
    }
    if (v[b]<x)
        out << -1 << "\n";
    else
        out << b + 1 << "\n";
}
void f2(int x){
    int b = 0;
    int p = 1 << 16;
    while (p != 0){
        if (b + p<n&&v[b + p] <= x)
            b += p;
        p /= 2;
    }
    out << b + 1 << "\n";
}
void f3(int x){
    int b = 0;
    int p = 1 << 16;
    while (p != 0){
        if (b + p<n&&v[b + p] < x)
            b += p;
        p /= 2;
    }
    out << b + 2 << "\n";
}