Cod sursa(job #876938)

Utilizator Alexxino7Alexandru Popescu Alexxino7 Data 12 februarie 2013 13:17:07
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include<fstream>
using namespace std;
#define Max 100004

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

unsigned int N,M,poz[3],X,aux;
unsigned long long V[Max];

void cb(unsigned int left, unsigned int right){
    if(left<=right){
        int mid = left + (right-left)/2;
        if(aux==0){
            if(V[mid]<X){
                cb(mid+1,right);
            }
            if(V[mid]>X){
                cb(left,mid-1);
            }
            if(V[mid]==X){
                poz[0]=mid;
                cb(mid+1,right);
            }
        }
        if(aux==1){
            if(V[mid]<=X){
                poz[1]=mid;
                cb(mid+1,right);
            }
            if(V[mid]>X){
                cb(left,mid-1);
            }
        }
        if(aux==2){
            if(V[mid]>=X){
                poz[2]=mid;
                cb(left,mid-1);
            }
            if(V[mid]<X){
                cb(mid+1,right);
            }
        }
    }
}

int main(){

    fin>>N;
    for(unsigned int i=1;i<=N;i++){
        fin>>V[i];
    }

    fin>>M;
    for(unsigned int i=1;i<=M;i++){
        fin>>aux>>X;
        poz[0]=0;
        cb(1,N);
        if(aux==0 && !poz[0])
            fout<<"-1\n";
        else
            fout<<poz[aux]<<"\n";
    }

    return 0;
}