Cod sursa(job #2197991)

Utilizator Seb0730Matei Sebastian Seb0730 Data 23 aprilie 2018 12:07:17
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");

int n, v[100001];




int cautbin0(int x){
    int poz=0;
    for(int i=1<<30;i>0;i=i>>1){
        if(poz+i<=n){
            if(v[poz+i]<=x){
                poz=poz+i;
            }
        }

    }
    if(v[poz]==x){
        return poz;
    }else{
        return -1;
    }
}



int cautbin1(int x){
    int poz=0;
    for(int i=1<<30;i>0;i=i>>1){
        if(poz+i<=n){
            if(v[poz+i]<=x){
                poz=poz+i;
            }
        }

    }
    if(v[poz]<=x){
        return poz;
    }
}



int cautbin2(int x){
    int poz=0;
    for(int i=1<<30;i>0;i=i>>1){
        if(poz+i<n){
            if(v[poz+i]<x){
                poz=poz+i;
            }
        }

    }
    if(v[poz]>=x){
        return poz;
    }
}







int main()
{
    int m, a, b;
    in>>n;
    for(int i=1;i<=n;i++){
        in>>v[i];
    }
    in>>m;
    for(int i=1;i<=m;i++){
        in>>a>>b;
        if(a==0){
            out<<cautbin0(b)<<endl;
        }
        if(a==1){
            out<<cautbin1(b)<<endl;
        }
        if(a==2){
            out<<cautbin2(b)<<endl;
        }
    }





    in.close();
    out.close();
}