Cod sursa(job #1832246)

Utilizator sLKzRoman George sLKz Data 19 decembrie 2016 17:44:12
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 2.03 kb
#include <stdio.h>

int binary_search_0(int* arr, int size, int target) {
    int low = 0;
    int high = size - 1;

    int result = -1;
    while (low < high) {
        int middle = low + (high - low) / 2;

        if (target == arr[middle]) {
            result = middle;
            low++;
        } else if (target < arr[middle]) {
            high = middle - 1;
        } else {
            low = middle + 1;
        }
    }

    return result;
}

int binary_search_1(int* arr, int size, int target) {
    int low = 0;
    int high = size - 1;

    int result = -1;
    while (low < high) {
        int middle = low + (high - low) / 2;

        if (target >= arr[middle]) {
            result = middle;
            low++;
        } else {
            high = middle - 1;
        }
    }

    return result;
}

int binary_search_2(int* arr, int size, int target) {
    int low = 0;
    int high = size - 1;

    int result = -1;
    while (low < high) {
        int middle = low + (high - low) / 2;

        if (target <= arr[middle]) {
            result = middle;
            high--;
        } else {
            low = middle + 1;
        }
    }

    return result;
}

int main(void) {
    FILE* file_r = fopen("cautbin.in", "r");
    FILE* file_w = fopen("cautbin.out", "w");

    int arr[100000];

    int n;
    fscanf(file_r, "%d", &n);
    for (int i = 0; i < n; i++) {
        fscanf(file_r, "%d", &arr[i]);
    }

    int m;
    fscanf(file_r, "%d", &m);
    for (int i = 0; i < m; i++) {
        int question, number;
        fscanf(file_r, "%d %d", &question, &number);

        if (question == 0) {
            fprintf(file_w, "%d\n", binary_search_0(arr, n, number) + 1);
        } else if (question == 1) {
            fprintf(file_w, "%d\n", binary_search_1(arr, n, number) + 1);
        } else if (question == 2) {
            fprintf(file_w, "%d\n", binary_search_2(arr, n, number) + 1);
        }
    }

    fclose(file_r);
    fclose(file_w);

    return 0;
}