Cod sursa(job #1676774)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 6 aprilie 2016 10:05:02
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.83 kb
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,indice,i,x,mij,st,dr,ok,okk,v[100010],m,o,mijprec;
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>v[i];
    }
    f>>m;
    for(o=1;o<=m;o++)
    {
        f>>indice>>x;
        mijprec=0;
        st=1;dr=n;
        ok=1;okk=1;
        if(indice==0)
        {
            while(ok==1)
            {
                mij=st+(dr-st)/2;
                if(x==v[mij])
                {
                    while(v[mij+1]==v[mij])
                        mij++;
                    g<<mij<<'\n';break;
                }
                else
                {
                    if(x<v[mij])
                    {
                        dr=mij;
                    }
                    else
                    {
                        if(x>v[mij])
                        {
                            st=mij;
                        }
                    }
                }
            }
        }
        else
        {
            if(indice==1)
            {
                while(ok==1)
                {
                    if(okk==1) mij=st+(dr-st)/2;
                    if(x>=v[mij]&&okk==1)
                    {
                        st=mij;
                    }
                    else
                    {
                        if(x<v[mij]&&okk==1)
                        {
                            dr=mij;
                        }

                    }
                    if(mij==mijprec&&x==v[mij])
                        {while(v[mij+1]==v[mij]&&okk==1)
                        mij++;
                            g<<mij<<'\n';break;}
                            else
                            {
                                if(mijprec==mij&&x!=v[mij])
                                {
                                    mij--;okk=0;
                                }
                            }
                        mijprec=mij;
                }
            }
        }
            if(indice==2)
            {
                while(ok==1)
                {
                    if(okk==1)mij=st+(dr-st)/2;
                    if(x>=v[mij]&&okk==1)
                    {
                        dr=mij;
                    }
                    else
                    {
                        if(x<v[mij]&&okk==1)
                        st=mij;
                    }
                    if(mij==mijprec&&x==v[mij])
                    {while(v[mij-1]==v[mij]&&okk==1)
                    mij--;
                    if(x==v[mij])
                        g<<mij<<'\n';break;}
                        else if(mij==mijprec&&x!=v[mij]) {mij++;okk=0;}
                    mijprec=mij;
                }
            }

    }
    return 0;
}