Cod sursa(job #2526096)

Utilizator Teodor94Teodor Plop Teodor94 Data 18 ianuarie 2020 11:44:30
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.54 kb
#include <cstdio>

#define MAX_N 100000

int v[MAX_N];

int main() {
    FILE *fin, *fout;
    fin = fopen("cautbin.in", "r");
    fout = fopen("cautbin.out", "w");

    int n, m, task, x, left, right, mid;
    fscanf(fin, "%d", &n);
    for (int i = 0; i < n; ++i)
        fscanf(fin, "%d", &v[i]);

    fscanf(fin, "%d", &m);
    while (m--) {
        fscanf(fin, "%d%d", &task, &x);
        if (task == 0) {
            left = 0, right = n;
            while (right - left > 1) {
                mid = (left + right) / 2;
                if (v[mid] > x)
                    right = mid;
                else
                    left = mid;
            }

            if (v[left] == x)
                fprintf(fout, "%d\n", left + 1);
            else
                fprintf(fout, "-1\n");
        } else if (task == 1) {
            left = 0, right = n;
            while (right - left > 1) {
                mid = (left + right) / 2;
                if (v[mid] > x)
                    right = mid;
                else
                    left = mid;
            }

            fprintf(fout, "%d\n", left + 1);
        } else if (task == 2) {
            left = 0, right = n;
            while (right - left > 1) {
                mid = (left + right) / 2;
                if (v[mid] > x - 1)
                    right = mid;
                else
                    left = mid;
            }

            fprintf(fout, "%d\n", left + 2);
        }
    }

    fclose(fin);
    fclose(fout);
    return 0;
}