Cod sursa(job #1321084)

Utilizator GrusterLazar Dragos Gruster Data 18 ianuarie 2015 19:22:41
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[200000],N,x,i,M,m1;
int caut0(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;
    if (v[i]==val) return i+1;
    else return -1;
}
int caut1(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 caut2(int val)
{
    int i, step;
    for (step = 1; step < N; step <<= 1);
    for (i = 1; step; step >>= 1)
        if (i + step < N && v[i + step] < val)
           i += step;
    return i+1;
}
int main()
{
    fin>>N;
    for (i=0;i<N;i++)
        fin>>v[i];
    fin>>M;
    for (i=0;i<M;i++)
        {
            fin>>m1>>x;
            if (m1==0) fout<<caut0(x)<<endl;
            if (m1==1) fout<<caut1(x)<<endl;
            if (m1==2) fout<<caut2(x)<<endl;

        }
    return 0;
}