Cod sursa(job #2640526)

Utilizator Ionut2791Voicila Ionut Marius Ionut2791 Data 6 august 2020 18:14:30
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, v[100005], m, q, x, i, gasit, mid;

void solve(int l, int r){

    while(l < r-1){

        mid = l + (r-l) / 2;

        if(v[mid] > x)
            r = mid;
        else
            l = mid;
         //fout << l << " " << r << "\n";
    }
    if(v[l] == x)
        gasit = l;
    if(v[r] == x)
        gasit = r;

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

int main(){
    //ifstream fin("date.in");

    fin >> n;

    for(int i = 1; i <= n; ++i)
        fin >> v[i];

    fin >> m;

    for(int i = 0; i < m; ++i){
        fin >> q >> x;
        solve(1, n);
    }

    return 0;
}