Cod sursa(job #2280296)

Utilizator andreipurcaruAndrei Purcaru andreipurcaru Data 10 noiembrie 2018 13:38:39
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int n,m,v[100005],x,t;
int zero(int st,int dr,int x){
    int mid;
    while(st<=dr){
        mid=(st+dr)/2;
        if(v[mid]>x)
            dr=mid-1;
        else
            st=mid+1;
    }
    if(v[dr]==x)
        return dr;
    else
        return -1;
}
int unu(int st,int dr,int x){
    int mid;
    while(st<=dr){
        mid=(st+dr)/2;
        if(v[mid]>x)
            dr=mid-1;
        else
            st=mid+1;
    }
    return dr;
}
int doi(int st,int dr,int x){
    int mid;
    while(st<=dr){
        mid=(st+dr)/2;
        if(v[mid]<x)
            st=mid+1;
        else
            dr=mid-1;
    }
    return st;
}
int main(){
    in>>n;
    for(int i=1;i<=n;i++){
        in>>v[i];
    }
    in>>m;
    for(int i=1;i<=m;i++){
        in>>t>>x;
        switch(t){
            case 0:
                out<<zero(1,n,x)<<"\n";
                break;
            case 1:
                out<<unu(1,n,x)<<"\n";
                break;
            case 2:
                out<<doi(1,n,x)<<"\n";

        }
    }

}