Cod sursa(job #3314426)

Utilizator tudor13mai@gmail.comBuciuman Tudor [email protected] Data 10 octombrie 2025 08:49:37
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,m;
vector<int> v(100100);
int main(){
    int a,b;
    ios::sync_with_stdio(false);
    fin.tie(NULL);
    fout.tie(NULL);
    fin>>n;
    for(int i=0; i<n; i++){
        fin>>v[i];
    }
    fin>>m;
    for(int i=0; i<m; i++){
        fin>>a>>b;
        if(a==0){
            auto y=upper_bound(v.begin(),v.begin()+n,b);
            if(y!=v.end() && v[y-v.begin()-1]==b){
                fout<<y-v.begin()<<'\n';
            }
            else
                fout<<-1<<'\n';
        }
        else if(a==1){
            auto y=upper_bound(v.begin(),v.begin()+n,b);
            if(y!=v.end()){
                if(v[y-v.begin()-1]==b)
                fout<<y-v.begin()<<'\n';
                else if(v[y-v.begin()-2]<b){
                fout<<y-v.begin()-1<<'\n';
                }
                else{
                fout<<-1<<'\n';
                }
            }
            else
                fout<<-1<<'\n';
        }
        else{
            auto y=lower_bound(v.begin(),v.begin()+n,b);
            if(y!=v.end()){
                if( v[y-v.begin()]==b)
                fout<<y-v.begin()+1<<'\n';
            else if(v[y-v.begin()+1]==b)
                fout<<y-v.begin()+2<<'\n';
            else
                fout<<-1<<'\n';
            }
            else
                fout<<-1<<'\n';
        }
    }
    return 0;
}