Cod sursa(job #3197122)

Utilizator IustaganIusin Dabu Iustagan Data 25 ianuarie 2024 18:29:33
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <fstream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");

long long int x[100001];

int bin_search(long long int a,int st,int dr,long long int x[])
{
    int ans=-1;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(x[mij]<=a)
        {
            st=mij+1;
            ans=mij;
        }
        else
        {
            dr=mij-1;
            ans=mij-1;
        }
    }
    return ans;

}

int bin_search2(long long int a,int st,int dr,long long int x[])
{
    int ans=-1;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(x[mij]<a)
        {
            st=mij+1;
            ans=mij+1;

        }
        else
        {
            dr=mij-1;
            ans=mij;
        }
    }
    return ans;

}

int main()
{
     int n,m,op1[100001],op2[100001];
     cin>>n;
     for(int i=1;i<=n;i++)
        cin>>x[i];
     cin>>m;
     for(int i=1;i<=m;i++)
        cin>>op1[i]>>op2[i];

     for(int i=1;i<=m;i++)
        if(op1[i]==0)
        {
            int b=bin_search(op2[i],1,n,x);

            if(x[b]==op2[i])
                cout<<b<<'\n';
            else
                cout<<-1<<'\n';
        }
        else if(op1[i]==1)
        {
            int b=bin_search(op2[i],1,n,x);
            cout<<b<<'\n';
        }
        else
        {
            int b=bin_search2(op2[i],1,n,x);
            cout<<b<<'\n';
        }
}