Cod sursa(job #1691524)

Utilizator roparexRoparex roparex Data 18 aprilie 2016 17:06:46
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<fstream>
using namespace std;
int v[100001];
int main()
{
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");
    int i,n,m,st,dr,mj,q,x;
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];
    }
    fin>>x;
    for(i=1;i<=x;i++)
    {
        fin>>q>>m;
    st=1;
    dr=n;
    int stp=0,drp=0;
    mj=(st+dr)/2;
    if(q==0||q==2)
    while(v[mj]!=m&&(stp!=st||drp!=dr))
    {
        stp=st;
        drp=dr;
        if(v[mj]>m)
        {
            dr=mj;
            mj=(dr+st+1)/2;
            continue;
        }
        if(v[mj]<m)
        {
            st=mj;
            mj=(dr+st+1)/2;
            continue;
        }
    }
    else
    while(v[mj]!=m&&(stp!=st||drp!=dr))
    {
    stp=st;
    drp=dr;
        if(v[mj]>m)
        {
            dr=mj;
            mj=(dr+st)/2;
            continue;
        }
        if(v[mj]<m)
        {
            st=mj;
            mj=(dr+st)/2;
            continue;
        }
    }
    if(m==v[mj])
        {
            if(q<2)
            while(v[mj+1]==v[mj]) mj++;
            else
            while(v[mj-1]==v[mj]) mj--;
        }
        if(m!=v[mj]&&q==0) fout<<-1<<'\n';
        else
        fout<<mj<<'\n';
    }

}