Cod sursa(job #2154087)

Utilizator SolcanMihaiSolcan Mihai Andrei SolcanMihai Data 6 martie 2018 18:20:15
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <cstdio>

using namespace std;

int sir[100005];
int n, m;

int bs1(int x, int tip){
    int putere;
    int sol;

    for(putere = 1; putere < n; putere <<= 1);
    for(sol = 0; putere >= 1; putere >>= 1){
        if(putere + sol <= n && sir[sol + putere] <= x){
            sol += putere;
        }
    }

    if(sir[sol] != x && tip == 0){
        return -1;
    }
    else{
        return sol;
    }
}

int bs3(int x){
    int putere;
    int sol;

    for(putere = 1; putere < n; putere <<= 1);
    for(sol = n; putere >= 1; putere >>= 1){
        if(sol - putere >= 0 && sir[sol - putere] >= x){
            sol -= putere;
        }
    }

    return sol;
}

int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);

    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        scanf("%d", &sir[i]);
    }

    scanf("%d", &m);

    int x, y;

    for(int k = 0; k < m; k++){
        scanf("%d %d", &x, &y);

        if(x == 0){
            printf("%d\n", bs1(y, x));
        }
        if(x == 1){
            printf("%d\n", bs1(y, x));
        }
        if(x == 2){
            printf("%d\n", bs3(y));
        }
    }

    return 0;
}