Cod sursa(job #2273760)

Utilizator NeganAlex Mihalcea Negan Data 31 octombrie 2018 21:38:53
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.63 kb
#include <fstream>

using namespace std;
ifstream fin("cb.in");
ofstream fout("cb.out");
int v[100110];
int main()
{
    int n, i, p, poz1, st, dr, mij, x, y;
    fin >> n;
    for(i = 1;i <= n;i++)
        fin >> v[i];
    fin >> p;
    for(i = 1;i <= p;i++)
        {
            fin >> x >> y;
            if(x == 0)
            {
                st = 1;
                dr = n;
                poz1 = -1;
                while(st < dr)
                {
                    mij = st+(dr-st) / 2;
                    if(v[mij] == y)
                    {
                        poz1 = mij;
                        st = mij + 1;
                    }

                    else if(v[mij] < y)
                        st = mij + 1;
                    else if(v[mij] > y)
                        dr = mij - 1;
                }
                fout<<poz1<<"\n";


            }
            else if(x == 1)
            {
                st = 1;
                dr = n;
                poz1 = -1;
                while(st < dr)
                {
                    mij = st+(dr-st) / 2;
                    if(v[mij] == y)
                    {
                        poz1 = mij;
                        st = mij + 1;
                    }

                    else if(v[mij] < y)
                        st = mij + 1;
                    else if(v[mij] > y)
                        dr = mij - 1;
                }
                 if(poz1!= -1)
                    fout << poz1<<"\n";
                else{
                    if(v[mij] < y)
                        fout << mij <<"\n";
                    else if(v[mij] > y)
                        fout << mij - 1 << "\n";
                }

            }
            else if(x == 2)
            {
                st = 1;
                dr = n;
                poz1 = -1;
                while(st <= dr)
                {
                    mij = st+(dr-st) / 2;
                    if(v[mij] == y)
                    {
                        poz1 = mij;
                        dr = mij - 1;
                    }

                    else if(v[mij] < y)
                        st = mij + 1;
                    else if(v[mij] > y)
                        dr = mij - 1;
                }
                if(poz1!= -1)
                    fout << poz1 << "\n";
                else
                {
                    if(v[mij] < y)
                        fout << mij+1 << "\n";
                    else if(v[mij] > y)
                        fout << mij << "\n";
                }


            }
        }

   return 0;
}