Cod sursa(job #1901658)

Utilizator DariaPascuPascu Daria DariaPascu Data 4 martie 2017 10:12:51
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.32 kb
#include <bits/stdc++.h>

using namespace std;
int n, i, m, x, y, lft, rght, mddle, j, poz, v[100000];
int main()
{
    ifstream in ("cautbin.in");
    ofstream out ("cautbin.out");

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

    in >> m;
    for(i = 1; i <= m; ++i)
    {
        in >> y >> x;
        if(y == 0)
        {
            lft = 1; rght = n;
            while(lft <= rght)
            {
                mddle = (lft + rght) >> 1;
                if(v[mddle] == x)
                {
                    poz = mddle;
                    j = poz + 1;
                    while(v[j] == x)
                    {
                        ++ j;
                        poz = j - 1;
                    }
                    out << poz << "\n";
                    break;
                }

                else if(v[mddle] > x)
                    rght = mddle - 1;

                else
                    lft = mddle + 1;
            }
        }

        else if(y == 1)
        {
            lft = 1; rght = n;
            while(lft <= rght)
            {
                mddle = (lft + rght) >> 1;
                if(v[mddle] == x || v[mddle] < x)
                {
                    poz = mddle;
                    j = poz + 1;
                    while(v[j] == x)
                    {
                        ++ j;
                        poz = j - 1;
                    }
                    out << poz << "\n";
                    break;
                }

                else if(v[mddle] > x)
                    rght = mddle - 1;
            }
        }

          else if(y == 2)
        {
            lft = 1; rght = n;
            while(lft <= rght)
            {
                mddle = (lft + rght) >> 1;
                if(v[mddle] == x || v[mddle] > x)
                {
                    poz = mddle;
                    j = poz - 1;
                    while(v[j] == x)
                    {
                        --j;
                        poz = j + 1;
                    }
                    out << poz << "\n";
                    break;
                }

                else if(v[mddle] < x)
                    lft = mddle + 1;
            }
        }

    }


    in.close();
    out.close();
    return 0;
}