Cod sursa(job #2481365)

Utilizator Florinos123Gaina Florin Florinos123 Data 26 octombrie 2019 20:00:14
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.72 kb
#include <iostream>
#include <cstring>
#include <fstream>

using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int main()
{
    int v[100001],n,i,t,x,m,mij,st,dr,gasit=0,nr;
f>>n;
for(i=1;i<=n;i++)
     f>>v[i];
f>>m;
for(i=1;i<=m;i++)
{
    f>>t>>x;
    gasit=0;
    if(t==0)
       {
           st=1;
           dr=n;
             while(st<=dr)
             {
                 mij=(st+dr)/2;
                 if(v[mij]==x)
                 {
                     nr=mij;
                     gasit=1;
                     break;
                 }
                 else
                    if(x<v[mij])
                        dr=mij-1;
                 else
                    st=mij+1;

             }
             if(gasit==0)
                g<<-1<<endl;
                else
                {
                    if(v[nr+1]==x)
                     while(v[nr]==x)
                            nr++;
                        nr--;
                    g<<nr<<endl;

                }


         }
         if(t==1)
         {
             nr=0;
             st=1;
             dr=n;
             while(st<=dr)
             {
                 mij=(st+dr)/2;
                 if(v[mij]==x)
                 {
                     nr=mij;
                     break;
                 }
                 else
                    if(x<v[mij])
                       dr=mij-1;
                   else
                    st=mij+1;
             }
            if(v[nr+1]==x)
            {
                while(v[nr]==x)
                  nr++;
               nr--;
               g<<nr<<endl;
            }
            else
                if(v[nr]==x)
                  g<<nr<<endl;
            else
                if(v[nr]>x)
                {
                while(v[nr]>x)
                    nr--;
                 g<<nr<<endl;
                }

         }
         if(t==2)
         {
             nr=0;
             st=1;
             dr=n;
             while(st<=dr)
             {
                 mij=(st+dr)/2;
                 if(v[mij]==x)
                 {
                     nr=mij;
                     break;
                 }
                 else
                    if(x<v[mij])
                      dr=mij-1;
                 else
                    st=mij+1;
             }
             if(v[nr-1]==x)
             {
                while(v[nr]==x)
                     nr--;
              nr++;
              g<<nr<<endl;
             }
             if(v[nr]>x)
             {
                 while(v[nr]>x)
                    nr--;
                 g<<nr<<endl;
             }
         }
}

    return 0;
}