Cod sursa(job #1320955)

Utilizator andytosaAndrei Tosa andytosa Data 18 ianuarie 2015 18:10:19
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int n,m,v[100010],a,b,i,poz;
int c1(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;
}
int c2(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;
}

int main()
{
    cin>>n;
    for(i=0;i<n;++i)
        cin>>v[i];
    cin>>m;
    for(i=0;i<m;++i)
    {
        cin>>a>>b;
        switch(a)
        {
            case 0:{
                poz=c2(b);
                if(v[poz]==b)
                    cout<<poz+1<<'\n';
                else
                    cout<<"-1\n";
            }break;
            case 1:{
                poz=c2(b);
                cout<<poz+1<<'\n';

            }break;
            case 2:{
                poz=c1(b);
                if(v[poz]==b)
                    cout<<poz+1<<'\n';
                else
                    cout<<poz+2<<'\n';
            }break;
        }
    }
    return 0;
}