Cod sursa(job #1149581)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 22 martie 2014 01:04:47
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
#define Nmax 100099
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");

int N,M,pmax,v[Nmax];

int main()
{
    f>>N;
    for(int i=1;i<=N;++i)f>>v[i];
    f>>M;
    for(pmax=1;pmax<=N;pmax<<=1);
    for(int ii=1;ii<=M;++ii)
    {
        int tip,x;
        f>>tip>>x;
        if(!tip)
        {
            //cea mai mare pozitie pe care se afla un element cu valoarea x
            //sau -1 daca aceasta valoare nu se gaseste in sir
            int pas=pmax,i;
            for(i=0; pas ; pas>>=1)
                if(i+pas<=N && v[i+pas]<=x)i+=pas;
            if(v[i]==x)g<<i<<'\n';
                else g<<-1<<'\n';
        }
        if(tip==1)
        {
            //cea mai mare pozitie pe care se afla un element cu valoarea mai mica
            //sau egala cu x in sir.
            int pas=pmax,i;
            for(i=0; pas ; pas>>=1)
                if(i+pas<=N && v[i+pas]<=x)i+=pas;
            g<<i<<'\n';
        }
        if(tip==2)
        {
            //cea mai mica pozitie pe care se afla un element cu valoarea mai mare
            //sau egala cu x in sir.
            int pas=pmax,i;
            for(i=N; pas ; pas>>=1)
                if(i-pas>0  && v[i-pas]>=x)i-=pas;
            g<<i<<'\n';
        }
    }
    f.close();g.close();
    return 0;
}