Cod sursa(job #2074915)

Utilizator Mirela_MagdalenaCatrina Mirela Mirela_Magdalena Data 25 noiembrie 2017 09:50:52
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <cstdio>

using namespace std;
int n, a[100001], m;
int st, dr, mij;
int tip, x;

void cit()
{
    scanf("%d\n", &n);
    for(int i=1; i<=n; i++)
        scanf("%d ", &a[i]);
    scanf("%d\n", &m);
}


void tip0(int x)
{
    int poz = -1;
    st = 1; dr = n;
    for(st; st<=dr; )
    {
        mij = (st+dr)/2;
        if(x < a[mij])
            {dr = mij-1;}
        if(x == a[mij])
            {poz = mij; st = mij+1;}
        if(x > a[mij])
            {st = mij+1;}
    }
    printf("%d\n", poz);

}

void tip1(int x)
{
    int poz = -1;
    st = 1; dr = n;
    for(st; st<=dr; )
    {
        mij = (st+dr)/2;
        if(a[mij] <= x)
            {poz = mij; st = mij+1; }
        else
            {dr = mij-1;}
    }
    printf("%d\n", poz);
}

void tip2(int x)
{
    int poz = -1;
    st = 1; dr = n;
    for(st; st<=dr; )
    {
        mij = (st+dr)/2;
        if(a[mij] >= x)
            {poz = mij; dr = mij-1;}
        else st = mij+1;
    }
    printf("%d\n", poz);
}
int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);
    cit();
    for(int i=1; i<=m; i++)
    {
        scanf("%d %d\n", &tip, &x);
        if(tip == 0)
            tip0(x);
        else if(tip == 1)
            tip1(x);
        if(tip == 2)
            tip2(x);
    }
    return 0;
}