Cod sursa(job #1476199)

Utilizator ionutmodoModoranu Ionut-Vlad ionutmodo Data 24 august 2015 16:51:51
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#define MAX 100000
using namespace std;

int n, a[MAX + 1];

int CautaBinar(int stg, int drp, int x) {
    if(stg > drp) {
        return -1;
    }
    int middle = (stg + drp) / 2;
    if(a[middle] == x) {
        return middle;
    } else if(x < a[middle]) {
        return CautaBinar(stg, middle - 1, x);
    } else {
        return CautaBinar(middle + 1, drp, x);
    }
}

int main() {
    int i, m, op, x, poz;
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");
    fin >> n;
    for(i = 1; i <= n; ++i) {
        fin >> a[i];
    }
    
    fin >> m;
    for(i = 0; i < m; ++i) {
        fin >> op >> x;
        poz = CautaBinar(1, n, x);
        switch(op) {
            case 0:
                fout << poz << "\n";
                break;
            case 1:
                while(a[poz] <= x) {
                    ++poz;
                }
                fout << poz - 1 << "\n";
                break;
            case 2:
                while(a[poz] >=  x) {
                    --poz;
                }
                fout << poz + 1 << "\n";
                break;
        }
    }
    fin.close();
    fout.close();
    return 0;
}