Cod sursa(job #1950505)

Utilizator diib1023Cursi FTW diib1023 Data 3 aprilie 2017 01:00:23
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include <fstream>

using namespace std;

int n;

int Cautare_binara(int v[],int x, int stanga, int dreapta)
{
    if (stanga > dreapta) return dreapta+1;
    else
    {
        int mijloc = (dreapta+stanga) / 2;

        if (x == v[mijloc]) return mijloc;
        if (x > v[mijloc]) Cautare_binara(v,x,mijloc+1,dreapta);
        else Cautare_binara(v,x,stanga,mijloc-1);
    }
}

int main()
{
   ifstream in("cautbin.in");
   ofstream out("cautbin.out");

   int m,i;

   in >> n; int v[n+1];

   for (i=1;i<=n;i++) in >> v[i];

   in >> m;

   int q, x;

   int indice_curent;

   while (m>0)
   {
        in >> q >> x;

        indice_curent = Cautare_binara(v,x,1,n);

        switch(q)
        {
            case 0:
            {
               if (v[indice_curent] != x) out << "-1" << '\n';
               else
               {
                   while (v[indice_curent] == x) indice_curent++;
                   out << --indice_curent << '\n';
               }
               break;
            }
            case 1:
            {
                while (v[indice_curent] == x) indice_curent++;
                out << --indice_curent << '\n';
                break;
            }
            case 2:
            {

                while (v[indice_curent] == x) indice_curent--;

                if (v[indice_curent+1] == x) out << ++indice_curent << '\n';
                else out << indice_curent << '\n';
                break;
            }
        }

        m--;
   }

   return 0;
}