Cod sursa(job #281169)

Utilizator ViksenVictor-Nicolae Savu Viksen Data 13 martie 2009 21:03:34
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
//#include<iostream>
#include<fstream>
#include<vector>
#include<complex>

using namespace std;

int main() {
    ifstream fin; fin.open("cautbin.in");
    ofstream fout; fout.open("cautbin.out");

    int n,m,logN,poz,x;

    fin>>n;
    //cout<<"n : "<<n<<'\n';
    logN = (int)(log(n-1)/log(2));

    //cout<<"logN : "<<logN<<'\n';
    vector<int> V(n,0);


    while(n--)
        fin>>V[V.size()-n-1];


    fin>>m;
    //cout<<"m : "<<m<<'\n';
    while(m--) {
        fin>>x;
        fin>>n;

        //cout<<"\n\n"<<x<<" "<<n<<'\n';

        if(x<2) {
            poz = 0;
            for(int p = 1<<logN; p; p>>=1) {
                if(poz+p<V.size() && V[poz+p]<=n)
                    poz+=p;
                //cout<<"poz: "<<poz<<'\n';
            }

            if(!x && V[poz]!=n)
                fout<<"-1\n";
            else
                fout<<poz+1<<'\n';

        } else {
            poz = V.size()-1;
            for(int p = 1<<logN; p; p>>=1) {
                if(poz-p>=0 && V[poz-p]>=n)
                    poz-=p;
                //cout<<"poz: "<<poz<<'\n';
            }

            fout<<poz+1<<'\n';
        }
    }

    fin.close();
    fout.close();

    return 0;
}