Cod sursa(job #1506528)

Utilizator goalexboxerFMI Alexandru Ionascu goalexboxer Data 20 octombrie 2015 19:16:41
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include<iostream>
#include<fstream>
#define MAXN 100001
using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, m;
int v[MAXN];

int caut0(int value)
{
    int step;
    int i = 0;
    for(step = 1; step < n; step <<= 1);
    for(i=0; step != 0; step >>= 1)
    {
        if(i + step < n && v[i + step] <= value)
            i += step;
    }

    g << i << '\n';
    return 0;
}

int caut1(int value)
{
    int step;
    int i = 0;
    for(step = 1; step < n; step <<= 1);
    for(i=0; step != 0; step >>= 1)
    {
        if(i + step < n && v[i + step] <= value)
            i += step;
    }

    g << i << '\n';
    return 0;
}

int caut2(int value)
{
    int step;
    int i = n;
    for(step = 1; step < n; step <<= 1);
    for(i=n; step != 0; step >>= 1)
    {
        if(i - step > 0 && v[i - step] >= value)
            i -= step;
    }

    g << i << '\n';
    return 0;

}

int main()
{
    f >> n;
    for(int i=1; i<=n; i++)
        f >> v[i];
    f >> m;
    int x, y;
    for(int i=1; i<=m; i++)
    {
        f >> x;
        f >> y;

        switch(x)
        {
            case 0:
                caut0(y);
                break;
            case 1:
                caut1(y);
                break;
            case 2:
                caut2(y);
                break;
        }
    }

    return 0;

}