Cod sursa(job #2444412)

Utilizator CostiVVoicu Costi CostiV Data 31 iulie 2019 15:11:26
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include <fstream>
using namespace std;

int main (){
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");

    int N;
    fin >> N;
    int i, a[100001];
    for (i = 1; i <= N; ++i)
        fin >> a[i];
    int M;
    fin >> M;
    for (i = 1; i <= M; ++i){
        int intrebare, x;
        fin >> intrebare >> x;
        int left = 1, right = N, mid;
        int raspuns = -1;
        if (intrebare == 0){
            while (left <= right){
                mid = left + (right - left) / 2;
                if (a[mid] == x){
                    raspuns = mid;
                    left = mid + 1;
                }
                else{
                    if (a[mid] > x)
                        right = mid - 1;
                    else
                        left = mid + 1;
                }
            }
            fout << raspuns << endl;
        }
        if (intrebare == 1){
            while (left <= right){
                mid = left + (right - left) / 2;
                if (a[mid] <= x){
                    raspuns = mid;
                    left = mid + 1;
                }
                else // a[mid] > x
                    right = mid - 1;
            }
            fout << raspuns << endl;
        }
        if (intrebare == 2){
            while (left <= right){
                mid = (left + right) / 2;
                if (a[mid] >= x){
                    raspuns = mid;
                    right = mid - 1;
                }
                else
                    left = mid + 1;
            }
            fout << raspuns << endl;
        }
    }
    return 0;
}