Cod sursa(job #1320953)

Utilizator Harsan_SabinHarsan Sabin Harsan_Sabin Data 18 ianuarie 2015 18:09:45
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <iostream>

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,m,v[100010];
int Up(int val)
{
    int i, step;
    for (step = 1; step < n; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step < n && v[i + step] <= val)
           i += step;
    return i;
}
int Low(int val)
{
    int i, step;
    for (step = 1; step < n; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step < n && v[i + step] < val)
           i += step;
    return i+1;
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    fin>>m;
    for(int i=0;i<m;i++)
    {
        int a,nr;
        fin>>a>>nr;
        int k=Up(nr);
        if(a==0)
        {
            if(nr==v[k])
                fout<<k<<'\n';
            else
                fout<<"-1"<<'\n';
        }
        if(a==1)
            fout<<Up(nr)<<'\n';
        if(a==2)
            fout<<Low(nr)<<'\n';
    }
        return 0;
}