Cod sursa(job #1455521)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 28 iunie 2015 10:58:35
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
#define NMAX 100007
using namespace std;
FILE *fin, *fout;
int n, v[NMAX], m, p, x, rez;
int cautbin(int v[], int value, int n)
{
    int step = 1, first = 0;
    for(; step<= n; step<<=1);
    step>>=1;
    for(;step; step>>=1)
    {
        int index = first + step;
        if(index <= n)
        {
            if(v[index] <= value)
            {
                first = index;
            }
        }
    }
    return first;
}
int main()
{
    fin = freopen("cautbin.in", "r", stdin);
    fout = freopen("cautbin.out", "w", stdout);
    scanf("%d", &n);
    for(int i = 1; i<= n; i++) scanf("%d", &v[i]);
    scanf("%d", &m);
    for(int i = 1; i<= m; i++)
    {
        scanf("%d %d", &p, &x);
        if(p == 0)
        {
            rez = cautbin(v, x, n);
            if(v[rez] == x) printf("%d\n", rez);
            else printf("-1\n");
        }
        if(p == 1)
        {
            rez = cautbin(v, x, n);
            printf("%d\n", rez);
        }
        if(p == 2)
        {
            rez = cautbin(v, x-1, n)+1;
            printf("%d\n", rez);
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}