Cod sursa(job #2680990)

Utilizator morozanvladpetru@gmail.comVlad Petru [email protected] Data 4 decembrie 2020 19:23:11
Problema Cautare binara Scor 10
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.61 kb
/* Se citește de la tastatură un vector V sortat crescator de lungime N și apoi un șir de perechi (x, y) 
de numere naturale terminat cu -1. Pe măsura citirii acestor numere, 
să se determine eficient numărul de elemente din V cuprinse între x și y (x < y). Folosiți o căutare binară modificată. */


#include <stdio.h>
#include <stdlib.h>

int binary_search(int v[], int low, int high, int element, int m) {
    int mid = low + (high - low) / 2;
    if (high >= low) {
    //printf("%d low , %d high %d mid\n", low, high, mid);
        if (v[mid] == element) {
            return mid + 1;
        }
        if (v[mid] > element) {
            return binary_search(v, low, mid - 1, element, m);
        }   
        else {
            return binary_search(v, mid + 1, high, element, m);
        }
    }  
    switch (m)
    {
    case 0:
    return -1;
        break;
    case 1:
        if (element > v[mid])
            return mid + 1;
        else 
            return mid;
        break;
    case 2:
        if (element > v [mid])
            return mid + 2;
        else
            return mid + 1;
        break;
    }
        
}
    

#define SIZE 100

int main() {
    	
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    int v[SIZE], n, m, y, no_questions;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &v[i]);
    }
    scanf("%d", &no_questions);
    for (int i = 0; i < no_questions; i++) {
        scanf("%d", &m);
        scanf("%d", &y);
        //printf("searching for %d mode %d\n", y, m);
        printf("%d\n",binary_search(v, 0, n, y, m));
    }
    return 0;
}