Cod sursa(job #1333179)

Utilizator alexmisto342Turdean Alexandru alexmisto342 Data 2 februarie 2015 21:15:37
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.12 kb
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100001],i,j,mij,ld,ls,a,b,r;
int main()
{int m,n;
        fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];fin>>m;
    for(i=1;i<=m;i++)
    {
        fin>>a>>b;
        if(a==0)
        {
            ld=n;ls=1;
            while(ld>ls)
            {
                mij=(ls+ld)/2;
                if(v[mij]==b)
                    ls=mij;
                else
                if(v[mij]<b)
                    ls=mij+1;
                else
                    ld=mij-1;
                if(ls+1==ld||ls==ld)
                  {
                    if(v[ld]==b)
                        fout<<ld;
                    else
                    if(v[ls]==b)
                        fout<<ls;
                    else
                        fout<<-1; break;
                  }
            }
        }
                if(a==1)
        {
            ld=n;ls=1;
            while(ld>ls)
            {
                mij=(ls+ld)/2;
                if(v[mij]<=b)
                    ls=mij;
                else
                    ld=mij-1;
                if(ls+1==ld||ls==ld)
                  {
                    if(v[ld]<=b)
                        fout<<ld;
                    else
                    if(v[ls]<=b)
                        fout<<ls;
                    else
                        fout<<-1; break;
                  }
            }
        }
          if(a==2)
        {
            ld=n;ls=1;
            while(ld>ls)
            {
                mij=(ls+ld)/2;
                if(v[mij]>=b)
                    ld=mij;
                else
                    ls=mij+1;
                if(ls+1==ld||ls==ld)
                  {
                    if(v[ls]>=b)
                        fout<<ls;
                    else
                    if(v[ld]>=b)
                        fout<<ld;
                    else
                        fout<<-1;
                        break;
                  }
            }
        }
        fout<<'\n';
    }
    return 0;
}