Cod sursa(job #1902338)

Utilizator razvanboabesrazvan boabes razvanboabes Data 4 martie 2017 15:25:12
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.98 kb
#include <fstream>

using namespace std;

ifstream in("cautbin.in");
ofstream out("cautbin.out");
int v[100005];
int main()
{
    int n,m,q=0,i,x,l,a,m1,gasit=0,cn;
    in>>n;
    cn=n;
    for(i=0; i<n; i++)
    {
        in>>x;
        v[i]=x;
    }
    in>>m;
    for(i=0; i<m; i++)
    {
        in>>l>>a;
        n=cn;
        q=0;
        gasit=0;
        if(l==0)
        {
            while(gasit==0)
            {
                m1 = (n-q+1)/2;
                if(v[m1]>a)
                {
                    n=m1-1;
                    if(v[m1-1]<a)
                    {
                        out<<"-1";
                        gasit=1;
                    }

                }

                else if(v[m1]<a)
                {
                    q=m1+1;
                    if(v[m1+1]>a)
                    {
                        out<<"-1";
                        gasit=1;
                    }
                }

                else if(v[m1]==a)
                    if(v[m1+1]>a)
                    {
                        out<<m1+1<<'\n';
                        gasit=1;
                    }
                    else
                    {
                        while(v[m1]==a)
                            m1++;
                        out<<m1-1<<'\n';
                        gasit=1;
                    }
            }
        }
        else if(l==1)
        {
            while(gasit==0)
            {
                m1=(n-q+1)/2;
                if(v[m1]>a)
                    n=m1-1;
                else if(v[m1]<a)
                    q=m1+1;
                if(v[m1]==a)
                {
                    if(v[m1+1]>a)
                    {
                        out<<m1+1<<'\n';
                        gasit=1;
                    }

                    else if(v[m1+1]==a)
                    {
                        while(v[m1]==a)
                            m1++;
                        out<<m1-1<<'\n';
                        gasit=1;
                    }
                }
            }
        }
        else if(l==2)
        {
            while(gasit==0)
            {
                m1=(n-q+1)/2;
                if(v[m1]>a)
                {
                    while(v[m1]>a)
                        m1--;
                    out<<m1+2<<'\n';
                    gasit=1;
                }
                else if(v[m1]<a)
                    q=m1+1;
                else if(v[m1]==a)
                {
                    if(v[m1-1]<a)
                    {
                        out<<m1+2<<'\n';
                        gasit=1;
                    }

                    else if(v[m1-1]==a)
                    {
                        while(v[m1]==a)
                            m1--;
                        out<<m1+2;
                        gasit=1;
                    }
                }

            }
        }
    }

    return 0;
}