Cod sursa(job #1424786)

Utilizator stanciuandreiStanciulescu Andrei stanciuandrei Data 25 aprilie 2015 15:24:13
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
#define nmax 100000
#define L 16
using namespace std;
int v[nmax], n;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
void caut0(int x)
{
    int i=0;
    int pas=1<<L;
    while(pas!=0)
    {
        if(i+pas<=n&&v[i+pas]<=x)
        {
            i+=pas;
        }
        pas>>=1;
    }
    if(v[i]!=x)
        out<<"-1\n";
    else
        out<<i<<"\n";
}
void caut1(int x)
{
    int i=0;
    int pas=1<<L;
    while(pas!=0)
    {
        if(i+pas<=n&&v[i+pas]<=x)
        {
            i+=pas;
        }
        pas>>=1;
    }
    out<<i<<"\n";
}
void caut2(int x)
{
    int i=0;
    int pas=1<<L;
    while(pas!=0)
    {
        if(i+pas<=n&&v[i+pas]<x)
        {
            i+=pas;
        }
        pas>>=1;
    }
    out<<i+1<<"\n";
}
int main()
{
    in>>n;
    for(int i=1;i<=n;++i)
        in>>v[i];
    int t;
    in>>t;
    for(int i=0;i<t;++i)
    {
    int tip, a;
        in>>tip>>a;
        switch(tip)
        {
            case 0:caut0(a);break;
            case 1:caut1(a);break;
            case 2:caut2(a);break;
        }
    }
    out.close();
    in.close();
    return 0;
}