Cod sursa(job #1901705)

Utilizator sergiudnyTritean Sergiu sergiudny Data 4 martie 2017 10:35:56
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
#define DM 100001
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,v[DM],q,x,c;

void sol0(){
    int st=0,dr=n+1,mid;
    while(dr-st>1){
        mid=(dr+st)/2;
        if(v[mid]>=x) dr=mid;
        else st=mid;
    }
    if(dr==n+1 || v[dr]!=x){
        fout<<-1<<'\n';
        return;
    }
    while(v[dr]==x) dr++;
        fout<<dr-1<<'\n';
}
void sol1(){
    int st=0,dr=n+1,mid;
    while(dr-st>1){
        mid=(dr+st)/2;
        if(v[mid]<=x) st=mid;
        else dr=mid;
    }
    while(v[dr]>x) dr--;
    fout<<dr<<'\n';
}
void sol2(){
    int st=0,dr=n+1,mid;
    while(dr-st>1){
        mid=(st+dr)/2;
        if(v[mid]<=x) st=mid+1;
        else dr=mid;
    }
    fout<<dr<<'\n';
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;++i) fin>>v[i];
    fin>>q;
    while(q--){
        fin>>c>>x;
        if(c==0) sol0();
        if(c==1) sol1();
        if(c==2) sol2();
    }
    return 0;
}