Cod sursa(job #1844873)

Utilizator vladboss2323Ciorica Vlad vladboss2323 Data 10 ianuarie 2017 16:21:37
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
using namespace std;

const int L = 16;
int n, v[100001],m;
int caut0(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)
        return -1;
    return r;
}
int caut1(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 caut2(int x)
{
    int r = 0, pas = 1 << L;
    while (pas != 0)
    {
        if (r + pas <= n && v[r + pas] < x)
            r += pas;
        pas /= 2;
    }
    return 1 + r;
}
int main()
{
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");
    int i,x,y;
    in>>n;
    for(i=1;i<=n;i++)
        in>>v[i];
    in>>m;
    for(i=1;i<=m;i++)
    {
        in>>x>>y;
        if(x==0)
            out<<caut0(y)<<'\n';
        if(x==1)
            out<<caut1(y)<<'\n';
        if(x==2)
            out<<caut2(y)<<'\n';
    }
    return 0;
}