Cod sursa(job #2886275)

Utilizator SeracovanuEdwardSeracovanu Edward SeracovanuEdward Data 7 aprilie 2022 15:25:13
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

int n,M;
int A[100005];

int bin(int x){
int st = 1, dr = n;
int r = -1;
while (st <= dr){
    int mid = (st+dr) / 2;
    if(A[mid] == x){
        r = mid;
        st = mid + 1;
    }
    else
    if(A[mid] < x)
        st = mid + 1;
    else dr = mid - 1;
}
return r;
}

int bin2(int x){
int st = 1, dr = n;
int r = -1;
while (st <= dr){
    int mid = (st+dr) / 2;
    if(A[mid] <= x){
        r = mid;
        st = mid + 1;
    }
    else dr = mid - 1;
}
return r;
}

int bin3(int x){
int st = 1, dr = n;
int r = -1;
while (st <= dr){
    int mid = (st+dr) / 2;
    if(A[mid] >= x){
        r = mid;
        dr = mid - 1;
    }
    else st = mid + 1;
}
return r;
}


int main()
{
    freopen("cautbin.in" , "r" , stdin);
    freopen("cautbin.out" , "w" ,stdout);
    cin.tie(0)->sync_with_stdio(0);
    cin >> n;
    for(int i = 1;i <= n; ++i)cin >> A[i];
    cin >> M;
    while (M--){
        int tip,x;
        cin >> tip >> x;
        if(tip == 0)
            cout << bin(x) << "\n";
        else
        if(tip == 1)
            cout << bin2(x) << "\n";
        else
            cout << bin3(x) << "\n";
    }
}