Cod sursa(job #2693947)

Utilizator David861Retegan David David861 Data 7 ianuarie 2021 17:34:27
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
#define nmx 100000
 
using namespace std;
 
ifstream f("cautbin.in");
ofstream g("cautbin.out");

int st, dr, mij;
int v[nmx+1];

void cautBin(int lim, int nr){
    st = 1;
    dr = lim;
    while(st != dr) {
        mij = (st+dr)/2;
        if (v[mij] >= nr) {
            dr = mij;
        } else {
            st = mij+1;
        }
    }
}

int n, m, x;

void solveCase0(int nr) {
    cautBin(n, nr);
    if (v[st] == nr) {
        while (v[st] == nr)
            st++;
        g << st-1 << '\n';
    } else {
        g << -1 << '\n';
    }
}
void solveCase1(int nr) {
   cautBin(n, nr);
   while (st <= n && v[st] <= nr)
            st++;
    g << st-1 << '\n';
}
void solveCase2(int nr) {
   cautBin(n, nr);
   while (v[st] >= nr)
            st--;
    g << st+1 << '\n';
}

 
int main() {
    
    f >> n;
    for (int i = 1; i <= n; i++) {
       f >> x;
       v[i] = x;
    }
    f >> m;
    int test;
    for (int i = 1; i <= m; i++) {
        f >> test >> x;
        if (test == 0)
            solveCase0(x);
        else if (test == 1)
            solveCase1(x);
        else if (test == 2)
            solveCase2(x);
    }
    
   
    return 0;
}