Cod sursa(job #2068254)

Utilizator copanelTudor Roman copanel Data 17 noiembrie 2017 14:57:37
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>
#include <stdbool.h>

int v[100000];

#define L 16

int main()
{
    FILE *fin, *fout;
    int n, m;
    int i, p, x;
    int pas, r;
    bool prop;

    fin = fopen("cautbin.in", "r");
    fscanf(fin, "%d", &n);
    for (i = 0; i < n; i++)
        fscanf(fin, "%d", &v[i]);
    fscanf(fin, "%d", &m);
    fout = fopen("cautbin.out", "w");
    for (i = 0; i < m; i++) {
        fscanf(fin, "%d%d", &p, &x);
        pas = 1 << L;
        r = 0;
        while (pas != 0) {
            if (r + pas <= n) {
                switch (p) {
                case 0: case 1: prop = v[r + pas] <= x; break;
                case 2: prop = !(v[r + pas] >= x); break;
                }
            }
            if (r + pas <= n && prop)
                r += pas;
            pas >>= 1;
        }
        if (p == 0 && v[r] != x)
            r = -1;
        if (p == 2)
            r++;
        fprintf(fout, "%d\n", r + 1);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}