Cod sursa(job #2340914)

Utilizator ruxiTTutunaru Ruxandra ruxiT Data 11 februarie 2019 11:15:01
Problema Cautare binara Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.37 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;

}