Cod sursa(job #2420333)

Utilizator Rufus007Marincia Catalin Rufus007 Data 11 mai 2019 15:57:02
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include<fstream>

using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int N,M,A[100001];

int cautareClasica(int a[],int dim,int value){

    int i,step;
    for(step=1;step<dim;step<<=1);
    for(i=0;step;step>>=1)
        if(i+step<dim&&a[i+step]<=value)
            i+=step;
        if(a[i]!=value)
            return -1;
        else
            return i+1;
}
int cautarePozitieMaxima(int a[],int dim,int value){

    int i,step;
    for(step=1;step<dim;step<<=1);
    for(i=0;step;step>>=1)
        if(i+step<dim&&a[i+step]<=value)
            i+=step;
        return i+1;
}

int cautarePozitieMinima(int a[],int dim,int value){

    int i,step;
    for(step=1;step<dim;step<<=1);
    for(i=0;step;step>>=1)
        if(i+step<dim&&a[i+step]<=value-1)
            i+=step;
    return i+2;
}
int main(){
fin>>N;
for(int i=0;i<N;++i)
    fin>>A[i];
fin>>M;
for(int i=0;i<M;++i){
    int oper,x;
    fin>>oper>>x;

    if(oper==0)
        fout<<cautareClasica(A,N,x)<<"\n";
    else
        if(oper==1)
            fout<<cautarePozitieMaxima(A,N,x)<<"\n";
            else
                fout<<cautarePozitieMinima(A,N,x)<<"\n";

}



    fin.close();
    fout.close();
    return 0;
}