Cod sursa(job #2640486)

Utilizator Ionut2791Voicila Ionut Marius Ionut2791 Data 6 august 2020 16:21:16
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

int v[100005];
int n, m, closes, q, x, res, i;

int cautare_binara(int l, int r, int x){
    if(l < r){
        int mid = l + (r - l) / 2;

        if(v[mid] == x)
            return mid;
        else if(v[mid] > x)
            cautare_binara(l, mid, x);
        else
            cautare_binara(mid, r, x);
    }
    return r;
}

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

    fin >> n;

    for(int i = 0 ; i < n; ++i){
        fin >> v[i];
    }

    fin >> m;

    while(m--){
        fin >> q >> x;

        res = cautare_binara(0, n-1, x);

        if(q == 0){
            if(v[res] == x){
                for(i = res; v[i] == x; ++i);
                fout << i << '\n';
            }
            else
                fout << -1 << "\n";
        }
        else if(q == 1){
            if(v[res] == x){
                for(int i = res; v[i] == x; ++i);
                fout << i << '\n';
            }
            else
                fout << res << "\n";
        }
        else{
            if(v[res] == x){
                for(i = res; v[i] == x; --i);
                fout << i + 1<< '\n';
            }
            else
                fout << res << "\n";
        }

    }

    return 0;
}