Cod sursa(job #1902235)

Utilizator razvanboabesrazvan boabes razvanboabes Data 4 martie 2017 14:29:24
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.57 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-1; i++)
    {
        in>>x;
        v[i]=x;
    }
    in>>m;
    for(i=1; i<=m; i++)
    {
        in>>l>>a;
        n=cn;
        q=0;
        gasit=0;
        if(l==0)
        {
            while(gasit==0)
            {
                 m1 = (n-q)/2;
                if(v[m1]>a)
                    n=m1;
                else
                    if(v[m1]<a)
                    q=m1;
                else
                     if(v[m1]==a)
                        if(v[m1+1]>a)
                        {
                             out<<m1<<'\n';
                               gasit=1;
                        }
                    else
                      {
                          while(v[m1]==a)
                              m1++;
                              out<<m1--<<'\n';
                              gasit=1;
                      }
            }
        }
        else
        if(l==1)
        {
          while(gasit==0)
          {
              m1=(n-q)/2;
              if(v[m1]>a)
                  n=m1;
                  else
            if(v[m1]<a)
                q=m1;
            if(v[m1]==a)
                {
                    if(v[m1+1]>a)
                           out<<m1<<'\n';
                    else
                      if(v[m1+1]==a)
                      {
                          while(v[m1]==a)
                               m1++;
                            out<<m1<<'\n';
                            gasit=1;
                      }
                }
          }
        }
        else
        if(l==2)
        {
            while(gasit==0)
            {
                m1=(n-q)/2;
                if(v[m1]>a)
                {
                    while(v[m1]>=a)
                       m--;
                }
                else
                if(v[m1]<a)
                    q=m1;
                else
                 if(v[m1]==a)
                 {
                    if(v[m1-1]<a)
                         out<<m1<<'/n';
                    else
                    if(v[m1-1]==a)
                       {
                           while(v[m1]==a)
                              m1--;
                              out<<m1+2;
                           gasit=1;
                       }
                 }

            }
        }
    }

    return 0;
}