Cod sursa(job #1858020)

Utilizator FLOAREIliescu Maria FLOARE Data 26 ianuarie 2017 22:30:16
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 2.61 kb
#include <fstream>

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int i,j,n,x[100001],quest[100001],m,nr,gasit,u,p,mij,poz;

int main()
{
    fin>>n;

    for(i=1;i<=n;i++)
        fin>>x[i];

    fin>>m;

    for(i=1;i<=m;i++)
    {
        fin>>quest[i];
        fin>>nr;
        gasit=0;
        if(quest[i]==0)
        {
            p=1;
            u=n;
            while(p<=u)
            {
                mij=(u+p)/2;
                if(x[mij]==nr)
                {
                    if(mij<u && x[mij]==x[mij+1])
                    {
                        p=mij+1;
                    }
                    else
                    {
                        gasit=1;
                        fout<<mij<<'\n';
                        break;
                    }
                }
                else
                    if(x[mij]<nr)
                        p=mij+1;
                    else
                        u=mij-1;
            }

            if(gasit==0)
                fout<<-1<<'\n';
        }

        if(quest[i]==1)
        {
            p=1;
            u=n;
            while(p<=u)
            {
                mij=(u+p)/2;
                if(x[mij]==nr)
                {
                    if(mij<u && x[mij]==x[mij+1])
                    {
                        p=mij+1;
                    }
                    else
                    {
                        poz=mij;
                        break;
                    }
                }
                else
                    if(x[mij]<nr)
                    {
                        poz=mij;
                        p=mij+1;
                    }
                    else
                        u=mij-1;
            }
            fout<<poz<<'\n';
        }


        if(quest[i]==2)
        {
            p=1;
            u=n;
            while(p<=u)
            {
                mij=(u+p)/2;
                if(x[mij]==nr)
                {
                    if(mij>p && x[mij]==x[mij-1])
                    {
                        u=mij-1;
                    }
                    else
                    {
                        poz=mij;
                        break;
                    }
                }
                else
                    if(x[mij]>nr)
                    {
                        poz=mij;
                        u=mij-1;
                    }
                    else
                        p=mij+1;
            }
            fout<<poz<<'\n';
        }
    }

    return 0;
}