Cod sursa(job #1693115)

Utilizator tavonSuleyman Magnificul tavon Data 22 aprilie 2016 14:03:48
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int N,v[100001],Q,tip,x;
int cbzero(int x){
    int st=1,dr=N,mij;
    while(st<dr) {
        mij=(st+dr)/2;
        if(v[mij]<=x) st=mij+1;
        else dr=mij;
    }
    st--;
    if(v[st]==x) return st;
    else return -1;
}
int cbunu(int x){
    int st=1,dr=N,mij;
    while(st<dr) {
        mij=(st+dr)/2;
        if(v[mij]<=x) st=mij+1;
        else dr=mij;
    }
    st--;
    return st;

}
int cbdoi(int x){
    int st=1,dr=N,mij;
    while(st<dr) {
        mij=(st+dr)/2;
        if(v[mij]<x) st=mij+1;
        else dr=mij;
    }
    return st;
}
int main()
{
    in>>N;
    for(int i=1;i<=N;i++)   in>>v[i];
    in>>Q;
    for(int i=1;i<=Q;i++){
        in>>tip>>x;
        if(tip==0) out<<cbzero(x)<<'\n';
        if(tip==1) out<<cbunu(x)<<'\n';
        if(tip==2) out<<cbdoi(x)<<'\n';
    }
    return 0;
}