Cod sursa(job #2444929)

Utilizator CostiVVoicu Costi CostiV Data 1 august 2019 19:12:10
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.81 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;
        long long int mid = 0;
        int raspuns = 0;
        if (intrebare == 0){
            a[N + 1] = -1;
            while (left < right){
                mid = (left + right) / 2;
                if ((a[mid] == x) && (a[mid+1] != x)){
                    raspuns = mid;
                    break;
                }
                if(a[mid] > x)
                    right = mid;
                else
                    left = mid + 1;
            }
            if (a[left] == x)
                raspuns = left;
            if (raspuns == 0)
                raspuns = -1;
            fout << raspuns << endl;
        }
        if (intrebare == 1){
            while (left < right){
                mid = (left + right) / 2;
                if (a[mid] <= x)
                    left = mid + 1;
                else
                    right = mid;
            }
            if (a[left] > x)
                --left;
            raspuns = left;
            fout << raspuns << endl;
        }
        if (intrebare == 2){
            while (left < right){
                mid = (left + right) / 2;
                if (a[mid] < x)
                    left = mid + 1;
                else
                    right = mid;
            }
            if (a[mid] < x)
                ++mid;
            raspuns = mid;
            fout << raspuns << endl;
        }
    }
    fin.close();
    fout.close();
    return 0;
}