Cod sursa(job #2285590)

Utilizator CristyXtremeSimion Cristian CristyXtreme Data 18 noiembrie 2018 19:18:07
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>

using namespace std;

int caut(int *v, int n, int x, int tip_comp) {
    int pos, i;
    for (pos = 1; pos < n; pos <<= 1);
    for (i = 0; pos; pos >>= 1)
        if (i + pos <= n - 1 && v[i + pos] <= x)
            i += pos;
    if (tip_comp == 0 && v[i] != x)
        return -1;
    return i + 1;
}

int caut_reverse(int *v, int n, int x) {
    int pos, i;
    for (pos = 1; pos < n; pos <<= 1);
    for (i = n - 1, pos >>= 1; pos; pos >>= 1)
        if (i - pos >= 0 && v[i - pos] >= x)
            i -= pos;
    return i + 1;
}

int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);
    int n, m, v[100000] = {0}, cod, x;
    scanf("%i", &n);
    for (int i = 0; i < n; i++)
        scanf("%i", &v[i]);
    scanf("%i", &m);
    for (int i = 0; i < m; i++) {
        scanf("%i %i", &cod, &x);
        if (cod < 2)
            printf("%i\n", caut(v, n, x, cod));
        else
            printf("%i\n", caut_reverse(v, n, x));
    }
    return 0;
}