Cod sursa(job #2085967)

Utilizator TudorCaloianCaloian Tudor-Ioan TudorCaloian Data 10 decembrie 2017 22:40:43
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.63 kb
#include <fstream>

using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100000],x[100000],q[100000],n;

int cautbin2(int a)
{
    int st,dr,mij;
    st=0;
    dr=n-1;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij]<=a)
            st=mij+1;
        else
            dr=mij-1;
    }

       return dr+1;
}
int cautbin1(int a)
{
    int st,dr,mij;
    bool sem=1;
    st=0;
    dr=n-1;
    while(st<=dr&&sem)
    {
        mij=(st+dr)/2;
        if(v[mij]==a)
            {
                st=v[mij];
                sem=0;
            }
        else
        if(v[mij]<=a)
            st=mij+1;
        else
            dr=mij-1;
    }
if(st<=dr)
{while(v[mij+1]==st&&mij<n-1)
    mij++;
return mij+1;
}
     return -1;
}

int cautbin3(int a)
{
    int st,dr,mij;
    bool sem=1;
    st=0;
    dr=n-1;
    while(st<=dr&&sem)
    {
        mij=(st+dr)/2;
        if(v[mij]==a)

            sem=0;

        else
            if(v[mij]<=a)
                st=mij+1;
            else
                dr=mij-1;
    }

       if(!sem)
        {while(v[mij-1]==a&&mij>1)
            mij--;
        return mij+1;
        }
       else
        return st+1;
}
int main()
{
    int m,i,j;
    f>>n;
    for(i=0;i<n;i++)
        f>>v[i];
    f>>m;
    for(i=0;i<m;i++)
        f>>q[i]>>x[i];

    for(i=0;i<m;i++)
    {
        if(q[i]==0)
            g<<cautbin1(x[i])<<endl;
        else
            if(q[i]==1)
                g<<cautbin2(x[i])<<endl;
            else
                g<<cautbin3(x[i])<<endl;

    }

    return 0;
}