Cod sursa(job #2209185)

Utilizator ruxiTTutunaru Ruxandra ruxiT Data 2 iunie 2018 10:00:06
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.32 kb
#include <stdio.h>
#include <stdlib.h>
#define L 16
#define N 100001

int v[N], n, m;

int main() {
    int r, pas, i, a, x;
    FILE *fin, *fout;
    fin = fopen("cautbin.in", "r");
    fout = fopen("cautbin.out", "w");
    fscanf(fin, "%d", &n);
    for (i = 1; i <= n; i++) {
        fscanf(fin, "%d", &v[i]);
    }
    fscanf(fin, "%d", &m);
    for (i = 0; i < m; i++) {
        fscanf(fin, "%d%d", &a, &x);
        if (a == 0) {
            r = 0;
            pas = 1 << L;
            while (pas != 0) {
                if (r + pas <= n && v[r + pas] <= x) {
                    r += pas;
                }
                pas /= 2;
            }
            if (r == 0 || v[r] < x) {
                r = -1;
            }
        }
        if (a == 1) {
            r = 0;
            pas = 1 << L;
            while (pas != 0) {
                if (r + pas <= n && v[r + pas] <= x) {
                    r += pas;
                }
                pas /= 2;
            }
        }
        if (a == 2) {
            r = 0;
            pas = 1 << L;
            while (pas != 0) {
                if (r + pas <= n && v[r + pas] < x) {
                    r += pas;
                }
                pas /= 2;
            }
            r++;
        }
        fprintf(fout, "%d\n", r);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}