N개의 원소를 포함하고 있는 수열이 오름차순으로 정렬되어 있습니다. 이때 이 수열에서 x가 등장하는 횟수를 계산하세요. 예를 들어 수열 {1, 1, 2, 2, 2, 2, 3}이 있을 때 x = 2라면, 현재 수열에서 값이 2인 원소가 4개이므로 4를 출력합니다.
단, 이 문제는 시간 복잡도 O(logN)으로 알고리즘을 설계하지 않으면 '시간 초과' 판정을 받습니다.
(1 ≤ N ≤ 1,000,000), (-10^9 ≤ x ≤ 10^9)
(-10^9 ≤ 각 원소의 값 ≤ 10^9)
lower_bound
로 끝은 upper_bound
로 찾아준다.#include <iostream>
#include <vector>
using namespace std;
int n, target;
vector<int> arr;
int countByRange(vector<int> &arr, int leftValue, int rightValue) {
vector<int>::iterator rightIndex = upper_bound(arr.begin(), arr.end(), rightValue);
vector<int>::iterator leftIndex = lower_bound(arr.begin(), arr.end(), leftValue);
return rightIndex - leftIndex;
}
int main() {
cin >> n >> target;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
arr.push_back(x);
}
int answer = countByRange(arr, target, target);
if (answer == 0) cout<< -1;
else cout<<answer;
}