Cod sursa(job #2616979)

Utilizator pro119Manea Dumitru pro119 Data 20 mai 2020 15:33:58
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>
using namespace std;
#define ll long long


int n,m,question,x;

int bsearch(vector <int> a, int x){
    int l=0,r=a.size()-1;
    while(l<=r){
        int mid = l+(r-l)/2;
        if (a[mid]==x && (a[mid+1]!=x || mid+1>a.size()-1))
            return mid+1;
        else if (a[mid]>x){
            r=mid-1;
        }
        else l=mid+1;

    }
}
int lwr_bound(vector<int> a, int x){
    int l=0,r=a.size()-1;
    while(l<=r){
        int mid=l+(r-l)/2;
        if (a[mid]<=x && (a[mid+1]>x || mid+1>a.size()-1)) return mid+1;
        else if (a[mid]>x) r=mid-1;
        else l=mid+1;
    }
}
int upp_bound(vector<int> a, int x){
    int l=0,r=a.size()-1;
    while(l<=r){
        int mid=l+(r-l)/2;
        if (a[mid]>=x && (a[mid-1]<x || mid-1<0)) return mid+1;
        else if (a[mid]<x) l=mid+1;
        else r=mid-1;
    }
}
int main()
{
    //ifstream cin("cautbin.in");
    //ofstream cout("cautbin.out");
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    cin>>n;
    vector <int> a(n);
    for (int i=0; i<n; i++)
        cin>>a[i];
    cin>>m;
    while(m--){
        cin>>question>>x;
        if(question==0) cout<<bsearch(a,x)<<"\n";
        else if (question==1) cout<<lwr_bound(a,x)<<"\n";
        else cout<<upp_bound(a,x)<<"\n";
    }
    return 0;
}