Cod sursa(job #2665192)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 30 octombrie 2020 12:42:01
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>
#define Nmax 100005
using namespace std;
int a[Nmax], N, M, x, c;
ifstream f("cautbin.in");
ofstream g("cautbin.out");

int cb(int x){
    int st=1, dr=N, poz = -1;
    while(st<=dr){
        int m = (st + dr)/2;
        if (a[m]<=x)
            {poz = m; st = m + 1;}
        else dr = m - 1;
    }
    poz=(a[poz]==x? poz: -1);
    return poz;
}
int primul_mai_mare_egal(int x){
    int st=1, dr=N, poz = 0;
    while(st<=dr){
        int m = (st + dr)/2;
        if (a[m]>=x){
            poz = m;
            dr = m - 1;
        }
        else st= m + 1;
    }
    return poz;
}
int utimul_mai_mic_egal(int x){
    int st=1, dr=N, poz = 0;
    while(st<=dr){
        int m = (st + dr)/2;
        if (a[m]<=x){
            poz = m;
            st = m + 1;
        }
        else dr= m - 1;
    }
    return poz;
}

int main()
{
   f>>N;
   for(int i= 1; i<=N; i++) f>>a[i];
   f>>M;
   for(int i = 1; i<=M; i++){
       f>>c>>x;
       if(c==0) g<<cb(x)<<'\n';
       else if(c==2) g<<primul_mai_mare_egal(x)<<'\n';
       else g<<utimul_mai_mic_egal(x)<<'\n';
   }
    return 0;
}