Cod sursa(job #1691515)

Utilizator roparexRoparex roparex Data 18 aprilie 2016 16:50:31
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 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;
    while(v[mj]!=m&&(st!=stp||dr!=drp))
    {
        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(st==stp&&dr==drp)
        mj=-1;
    }
    if(mj>0)
        {
            if(q<2)
            while(v[mj+1]==v[mj]) mj++;
            else
            while(v[mj-1]==v[mj]) mj--;
            fout<<mj<<'\n';
        }
    else
    {
        switch(q)
        {
            case 0:fout<<-1<<'\n';break;
            case 1:fout<<v[mj]<<'\n';break;
            case 2:fout<<v[mj+1]<<'\n';break;
        }
    }

    }

}