Cod sursa(job #3148803)

Utilizator TeogaloiuMatei Ionescu Teogaloiu Data 4 septembrie 2023 14:00:05
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>

using namespace std;
ifstream cin ("cautbin.in");
ofstream cout ("cautbin.out");
int v[100001];
int maxst(int x,int n)
{
    int st = 1,dr = n,ans;
    while (st <= dr)
    {
        int med=(st+dr)/2;
        if(v[med]<=x)
        {
            ans=med;
            st=med+1;
        }
        else
            dr=med-1;
    }
    return ans;
}
int mindr(int x,int n)
{
    int st=1,ans=-1,dr=n;
    while (st<=dr)
    {
        int med=(st+dr)/2;
        if(v[med]>=x)
        {
            ans=med;
            dr=med-1;
        }
        else
            st=med+1;
    }
    return ans;
}
int main()
{
    int n,m;
    cin>>n;
    for (int i = 1; i <= n; i++)
        cin>>v[i];
    cin>>m;
    for (int  i = 1 ; i <= m; i++)
    {
        int cer,x;
        cin>>cer>>x;
        if (cer==0){
            int verif=maxst(x,n);
            if (v[verif]==x)
                cout<<verif<<'\n';
            else
                cout<<"-1\n";

        }
        if(cer==1)
            cout<<maxst(x,n)<<'\n';
        else if (cer==2)
            cout<<mindr(x,n)<<'\n';
    }
    return 0;
}