Cod sursa(job #1953966)

Utilizator calin1Serban Calin calin1 Data 5 aprilie 2017 09:37:09
Problema Cautare binara Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <cstdio>
#define N 100005

using namespace std;

int n, vec[N], x, p;

void afisare(int poz)
{
    if(!p)
    {
        if(vec[poz] == x)
        {
            while(vec[poz] == x)
            {
                poz++;
            }

            printf("%d\n", poz - 1);
        }
        else
        {
            printf("-1\n");
        }
    }
    if(p == 1)
    {
        while(vec[poz] <= x)
        {
            poz++;
        }

        printf("%d\n", poz - 1);
    }
    if(p == 2)
    {
        printf("%d\n", poz);
    }
}

void cautare_binara(int st, int dr)
{
    if(st == dr)
    {
        afisare(st);

         return;
    }

    int mij = (st + dr) >> 1;

    if(x <= vec[mij])
    {
        cautare_binara(st, mij);
    }
    else
    {
        cautare_binara(mij + 1, dr);
    }
}

void citire()
{
    scanf("%d\n", &n);

    for(int i = 1 ; i <= n ; ++i)
    {
        scanf("%d ", &vec[i]);
    }

    int tmp;

    scanf("%d\n", &tmp);

    for(int i = 0 ; i < tmp ; ++i)
    {
        scanf("%d %d\n", &p, &x);

        cautare_binara(1,n);
    }

}

int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);

    citire();

    return 0;
}