Cod sursa(job #1470743)

Utilizator valentin50517Vozian Valentin valentin50517 Data 12 august 2015 08:49:52
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include<fstream>

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int N,M,A[100002],x;
int caut0(int val){
    int i,j;
    for(i = 1;i<N;i<<=1);
    i >>= 1;
    for(j = 0;i;i >>=1){
          if(i+j < N && A[i+j] <= val)
                 j+=i;     
    }
    if(A[j] == val) return j+1;
    return -1;
}

int caut1(int val){
    int i,j;
    for(i = 1;i<N;i<<=1);
    i >>= 1;
    for(j = 0;i;i >>=1){
          if(i+j < N && A[i+j] <= val)
                 j+=i;     
    }
    if(A[j] <= val) return j+1;
}

int caut2(int val){
    int i,j;
    for(i = 1;i<N;i<<=1);
    i >>= 1;
    for(j = i;i;i >>=1){
          if(j-i >= 0 && A[j-i] >= val)
                 j-=i;     
    }
    if(A[j] >= val) return j+1;
}

int main(){
    int val;
    fin >> N;
    for(int i = 0;i<N;i++) fin >> A[i];
    fin >> M;
    for(int i = 0;i<M;i++){
            fin >> x >> val;
            switch(x){
                      case 0:{fout << caut0(val) << '\n';
                              break; }
                      case 1:{fout << caut1(val) << '\n';
                              break; }
                      case 2:{fout << caut2(val) << '\n';
                              break; }
            }
    }
}