Cod sursa(job #2718311)

Utilizator IoanaDraganescuIoana Draganescu IoanaDraganescu Data 8 martie 2021 17:36:39
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.62 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

const int NMax = 1e5;

int n, m;
int v[NMax + 5];

void Read(){
    fin >> n;
    for (int i = 1; i <= n; i++)
        fin >> v[i];
    fin >> m;
}

int BinarySearch0(int value, int left, int right){
    int ans = 0;
    while (left <= right){
        int mid = (left + right) >> 1;
        if (v[mid] == value)
            ans = max(ans, mid);
        if (v[mid] <= value)
            left = mid + 1;
        else
            right = mid - 1;
    }
    return ans;
}

int BinarySearch1(int value, int left, int right){
   int ans = 0;
   while (left <= right){
        int mid = (left + right) >> 1;
        if (v[mid] <= value){
            ans = max(ans, mid);
            left = mid + 1;
        }
        else
            right = mid - 1;
   }
   return ans;
}

int BinarySearch2(int value, int left, int right){
    int ans = NMax;
    while (left <= right){
        int mid = (left + right) >> 1;
        if (v[mid] >= value){
            ans = min(ans, mid);
            right = mid - 1;
        }
        else
            left = mid + 1;
    }
    return ans;
}

void Print(){
    while (m--){
        int type, value;
        fin >> type >> value;
        if (type == 0)
            fout << BinarySearch0(value, 1, n) << '\n';
        if (type == 1)
            fout << BinarySearch1(value, 1, n) << '\n';
        if (type == 2)
            fout << BinarySearch2(value, 1, n) << '\n';
    }
}

int main(){
    Read();
    Print();
    return 0;
}