Cod sursa(job #3221000)

Utilizator Gabriel_DaescuDaescu Gabriel Florin Gabriel_Daescu Data 5 aprilie 2024 18:07:25
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.44 kb
#include <fstream>
using namespace std;
ifstream  fin("cautbin.in");
ofstream fout("cautbin.out");
int N,M,i,cer,x,v[100002],p1,p2,pmijl,r;
int main()
{
    fin>>N;

    for(i=1; i<=N; i++)
    {
        fin>>v[i];
    }

    fin>>M;

    for(i=1; i<=M; i++)
    {
        fin>>cer>>x;

        if(cer==0)
        {
            p1=1;
            p2=N;
            r=0;
            while(p1<=p2)
            {
                pmijl=(p1+p2)/2;

                if(x==v[pmijl])
                {
                    r=pmijl;
                    p1=pmijl+1;
                }
                else
                {
                    if(x<v[pmijl])
                    {
                        p2=pmijl-1;
                    }
                    else
                    {
                        p1=pmijl+1;
                    }
                }
            }

            if(r!=0)
            {
                fout<< r << "\n";
            }
            else
            {
                fout<< -1 << "\n";
            }
        }

        if(cer==1)
        {
            p1=1;
            p2=N;
            r=0;

            while(p1<=p2)
            {
                pmijl=(p1+p2)/2;

                if(x==v[pmijl])
                {
                    r=pmijl;
                    p1=pmijl+1;
                }
                else
                {
                    if(x>v[pmijl])
                    {
                        p1=pmijl+1;
                        r=pmijl;
                    }
                    else
                    {
                        p2=pmijl-1;
                    }
                }
            }

            fout<< r << "\n";
        }

        if(cer==2)
        {
            p1=1;
            p2=N;
            r=0;;

            while(p1<=p2)
            {
                pmijl=(p1+p2)/2;


                if(x==v[pmijl])
                {
                    r=pmijl;
                    p2=pmijl-1;
                }
                else
                {
                    if(x>v[pmijl])
                    {
                        p1=pmijl+1;
                        r=pmijl+1;
                    }
                    else
                    {
                        p2=pmijl-1;
                    }
                }
            }

            fout<< r << "\n";
        }
    }
    return 0;
}