Cod sursa(job #2452173)

Utilizator george.andronacheAndronache George-Codrin george.andronache Data 29 august 2019 19:37:58
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.09 kb
#include <fstream>
using namespace std;
#define Nmax 100000
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,v[Nmax],m;
int cautbinar0(int l, int r, int b)
{
    int mid;
    if(l<=r)
    {
        mid= l + (r-l)/2;
        if(v[mid]==b)
        {
            for(int i=mid+1;i<=n;++i)
            {
                if(v[i]==b)
                {
                    mid=i;
                }
            }
            return mid;
        }
        if(v[mid]<b)
        {
            return cautbinar0(mid+1,r,b);
        }
        else
        {
            return cautbinar0(l,mid-1,b);
        }
    }
    return -1;
}
int cautbinar1(int l,int r,int b)
{
    int mid;
    if(l<=r)
    {
        mid= l+ (r-l)/2;
        if(v[mid]<=b)
        {
            for(int i=mid+1;i<=n;i++)
            {
                if(v[i]<=b)
                {
                    mid=i;
                }
            }
            return mid;
        }
        if(v[mid]<b)
        {
            return cautbinar1(mid+1,r,b);
        }
        else
        {
            return cautbinar1(l,mid-1,b);
        }
    }
}

int cautbinar2(int l,int r,int b)
{
    int mid;
    if(l<=r)
    {
        mid=l+ (r-l)/2;
        if(v[mid]>=b)
        {
            for(int i=mid-1;i>=1;i--)
            {
                if(v[i]>=b)
                {
                    mid=i;
                }
            }
            return mid;
        }
        if(v[mid]<b)
        {
            return cautbinar2(mid+1,r,b);
        }
        else
        {
            return cautbinar2(l,mid-1,b);
        }
    }
}

int main()
{
    fin>>n;
    for(int i=1;i<=n;++i)
    {
        fin>>v[i];
    }
    fin>>m;
    for(int i=1;i<=m;++i)
    {
        int a,b;
        fin>>a>>b;
        if(a==0)
        {
           fout<<cautbinar0(1,n,b)<<'\n';
        }
        else if(a==1)
        {
          fout<<cautbinar1(1,n,b)<<'\n';
        }
        else
        {
            fout<<cautbinar2(1,n,b)<<'\n';
        }
    }
    return 0;
}