Cod sursa(job #2077538)

Utilizator napsausageMateita David napsausage Data 28 noiembrie 2017 10:53:40
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

const int N=100001;
const int L=16;
int v[N];

int caut0(int n,int x)
{
    int r=0;
    int 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 caut1(int n,int x)
{
    int r=0;
    int pas=1<<L;
    while(pas!=0)
    {
        if(r+pas<=n && v[r+pas]<=x)
            r+=pas;
        pas/=2;
    }
    return r;
}

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

int main()
{
    int n,m,i,k,x;
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    fin>>m;
    for(i=1;i<=m;i++)
    {
        fin>>k>>x;
        if(k==0)
            fout<<caut0(n,x)<<"\n";
        if(k==1)
            fout<<caut1(n,x)<<"\n";
        if(k==2)
            fout<<caut2(n,x)<<"\n";
    }
    return 0;
}