Cod sursa(job #2552012)

Utilizator LuBoNILuput Bogdan LuBoNI Data 20 februarie 2020 14:49:31
Problema Cautare binara Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
using namespace std;
long long n,i,a[999],x,y,m;
int sol0(int x)
{
    int l=1;
    int r=n;
    int mx=-1;
    while(l<=r)
    {
        int mid=(l+r)/2;
        if(x>=a[mid]) l=mid+1;
        else if(x<=a[mid]) r=mid-1;
        if(x==a[mid])
            if(mid>mx) mx=mid;
    }
    return mx;
}
int sol1(int x)
{
    int l=1;
    int r=n;
    int mx=-1;
    while(l<=r)
    {
        int mid=(l+r)/2;
        if(x>=a[mid])
        {
            l=mid+1;
            if(mid>mx) mx=mid;
        }
        if(x<a[mid]) r=mid-1;
    }
    return mx;
}
int sol2(int x)
{
    int l=1;
    int r=n;
    int mn=2000000;
    while(l<=r)
    {
        int mid=(l+r)/2;
        if(x>a[mid]) l=mid+1;
        if(x<=a[mid])
        {
            r=mid-1;
            if(mid<mn || mn==-1) mn=mid;
        }
    }
    return mn;
}
int main()
{
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>a[i];
    fin>>m;
    for(i=1; i<=m; i++)
    {
        fin>>x>>y;
        if(x==0)
            fout<<sol0(y)<<endl;
        else if(x==1)
            fout<<sol1(y)<<endl;
        else if(x==2)
            fout<<sol2(y)<<endl;
    }
}