Cod sursa(job #2668062)

Utilizator valentina_veleatVeleat Valentina-Georgiana valentina_veleat Data 4 noiembrie 2020 13:54:22
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>

using namespace std;
ifstream f("cautbin.in");ofstream g("cautbin.out");
int n,a[100005],m,x,y;
int lastpos(int x)
{
    int st=1,dr=n,poz=-1;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(a[mij]<=x)
        {
            st=mij+1;poz=mij;
        }
        else dr=m-1;
    }
    if(a[poz]==x)return poz;
    return -1;
}
int umm(int x)
{
    int st=1,dr=n,poz=0;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(a[mij]<=x)
        {
            st=mij+1;poz=mij;
        }
        else dr=m-1;
    }
    return poz;
}
int umb(int x)
{
    int st=1,dr=n,poz=0;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(a[mij]>=x)
        {
            dr=mij-1;poz=mij;
        }
        else st=mij+1;
    }
    return poz;
}
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
    {
        f>>a[i];
    }
    f>>m;
    for(int i=1;i<=m;i++)
    {
        f>>x>>y;
        if(x==0)g<<lastpos(y)<<'\n';
        else if(x==1)g<<umm(y)<<'\n';
        else g<<umb(y)<<'\n';
    }
    return 0;
}