Cod sursa(job #1942997)

Utilizator marcudanfDaniel Marcu marcudanf Data 28 martie 2017 12:16:49
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n,m,v[100000];

int caut0(int val){
    int left=1,right=n,sol=-1;
    while(left<=right){
        int mid=(left+right)/2;
        if(val>v[mid]){
            right=mid-1;
        }else if(val<v[mid]){
            left=mid+1;
        }else{
            sol=mid;
            left=mid+1;
        }
    }
    return sol;
}

int caut1(int val){
    int left=1,right=n,sol=-1;
    while(left<=right){
        int mid=(left+right)/2;
        if(v[mid]<=val){
            sol=mid;
            left=mid+1;
        }else{
            right=mid-1;
        }
        }
    return sol;
}

int caut2(int val){
    int left=1,right=n,sol=-1;
    while(left<=right){
        int mid=(left+right)/2;
        if(v[mid]>=val){
            sol=mid;
            right=mid-1;
        }else{
            left=mid+1;
        }
    }
    return sol;
}



int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    fin>>m;
    for(int i=1;i<=m;i++){
        int a,b;
        fin>>a>>b;
        if(a==0)
            fout<<caut0(b)<<'\n';
        else if(a==1)
            fout<<caut1(b)<<'\n';
        else
            fout<<caut2(b)<<'\n';
    }
    return 0;
}