Cod sursa(job #2256630)

Utilizator IordachescuAncaFMI Iordachescu Anca Mihaela IordachescuAnca Data 8 octombrie 2018 21:38:01
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include<fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int a[100003],n,i,m,y,x;
int cb0(int a[],int n, int val)
{
    int s,d,mij,sol;
    s=1;
    d=n;
    sol=-1;
    while(s<=d)
    {
        mij=(s+d)/2;
        if(a[mij]==val)
        {
            s=mij+1;
            sol=mij;
        }
        if(a[mij]<val)
        {
            s=mij+1;
        }
        if(a[mij]>val)
        {
            d=mij-1;
        }
    }
    return sol;
}
int cb1(int n, int a[], int val)
{
    int s,d,mij,sol;
    s=1;
    d=n;
    sol=-1;
    while(s<d)
    {
        mij=(s+d)/2;
        if(a[mij]<=val)
        {
            s=mij+1;
            if(mij>sol)
            {
                sol=mij;
            }
        }
        else
        {
            d=mij-1;
        }
    }
    return sol;
}
int cb2(int a[],int n,int val)
{
    int s,d,sol,mij;
    s=1;
    d=n;
    sol=n;
    while(s<=d)
    {
        mij=(s+d)/2;
        if(a[mij]<n)
        {
            s=mij+1;
        }
        else
        {
            s=mij+1;
            if(sol>mij)
            {
                sol=mij;
            }
        }
    }
    return sol;
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    fin>>m;
    for(i=1;i<=m;i++)
    {
        fin>>y>>x;
        if(y==0)
        {
            fout<<cb0(a,n,x)<<"\n";
        }
        if(y==1)
        {
            fout<<cb1(n,a,x)<<"\n";
        }
        if(y==2)
        {
            fout<<cb2(a,n,x)<<"\n";
        }
    }
    fin.close();
    fout.close();
    return 0;
}