Cod sursa(job #2779244)

Utilizator AlexBraileanuAlexandru Braileanu AlexBraileanu Data 2 octombrie 2021 23:56:20
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>

using namespace std;
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");
int v [100001];
int cautbin (int x , int n){
    ///cerinta 0 si 1
    ///ultimul din zona verde
    int pas = (1 << 16) , r = 0;
    while (pas != 0){
        if (pas + r <= n && v [pas + r] <= x)
            r = r + pas;
        pas = pas / 2;
    }
    return r;
}
int cautbin2 (int x , int n){
    ///cerinta 2
    ///primul din zona rosie
    int pas = (1 << 16) , r = 0;
    while (pas != 0){
        if (pas + r <= n && v [pas + r] < x)
            r = r + pas;
        pas = pas / 2;
    }
    return r + 1;
}
int main()
{
    int n , m;
    f >> n;
    for(int i = 1 ; i <= n ; ++ i)
        f >> v [i];
    f >> m;
    for(int i = 1 ; i <= m ; ++ i){
        int tip , x;
        f >> tip >> x;
        if (tip == 0 || tip == 1){
            int poz = cautbin (x , n);
            if (tip == 0){
                if (v [poz] == x)
                    g << poz << '\n';
                else
                    g << -1 << '\n';
            }
            else
                g << poz << '\n';
        }
        else
            g << cautbin2 (x , n) << '\n';
    }
    return 0;
}