Cod sursa(job #1423713)

Utilizator PletoPletosu Cosmin-Andrei Pleto Data 22 aprilie 2015 13:55:14
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#define maxim 100010
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int N,M,type,x,LogN,q,lg,V[maxim];
void read_data()
{
    in>>N;
    for(int i=0;i<N;in>>V[++i]);
    in>>M;
}
void solve()
{
    for(LogN=1;LogN<=N;LogN<<=1);

    while(M--)
    {
        in>>type>>x;
        switch(type)
        {
        case 2:
            {
                for(lg=LogN,q=N;lg;lg>>=1)
                    if(q-lg>0 and V[q-lg]>=x)
                        q-=lg;
                out<<q<<'\n';
                break;
            }
        default:
            {
                for(lg=LogN,q=0;lg;lg>>=1)
                    if(q+lg<=N and V[q+lg]<=x)
                        q+=lg;
                if(!type and V[q]!=x) out<<"-1\n";
                else out<<q<<'\n';
            }
        }
    }
}
int main()
{
    read_data();
    solve();
    return 0;
}