Cod sursa(job #2205316)

Utilizator tnicorescuTudor Nicorescu tnicorescu Data 18 mai 2018 19:00:58
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.3 kb
#include <stdio.h>
#include <stdlib.h>
#define N 100001
#define L 16

int v[N], n;

int test0(int x)
{
    int r = 0, pas = 1 << L;
    while(pas!= 0)
    {
        if(r + pas <= n && v[r + pas] <= x)
        {
            r += pas;
        }
        pas /= 2;
    }
    if(v[r] < x)
    {
        r = -1;
    }
    return r;
}

int test1(int x)
{
    int r = 0, pas = 1<<L;
    while(pas!= 0)
    {
        if(r + pas <= n && v[r + pas] <= x)
        {
            r += pas;
        }
        pas /= 2;
    }
    return r;
}

int test2(int x)
{
    int r = 0, pas = 1 << L;
    while(pas!= 0)
    {
        if(r + pas <= n && v[r+pas] < x)
        {
            r += pas;
        }
        pas /= 2;
    }
    r++;
    return r;

}

int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);
    scanf("%d", &n);
    int i;
    for(i = 1; i <= n; i++)
    {
        scanf("%d", &v[i]);
    }
    int q, tip, x;
    scanf("%d", &q);
    for (i = 1; i <= q; i++)
    {
        scanf("%d%d", &tip, &x);
        if (tip == 0)
        {
            printf("%d\n", test0(x));
        }
        if (tip == 1)
        {
            printf("%d\n", test1(x));
        }
        if (tip == 2)
        {
            printf("%d\n", test2(x));
        }
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}