#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int binarySearch(vector<int>& arr, int n, int m) {
int lo = 0;
int hi = n - 1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (arr[mid] == m)
return mid;
else if (arr[mid] < m) {
lo = mid + 1;
}
else if (arr[mid] > m) {
hi = mid - 1;
}
}
return -1;
}
int main(int argc, char** argv)
{
int n, q;
cin >> n >> q;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr.begin(), arr.end());
for (int i = 0; i < q; i++) {
int m;
cin >> m;
if (m == arr[0] || m == arr[n - 1])
cout << "0" << endl;
else {
// auto f = find(arr.begin(), arr.end(), m);
int l = binarySearch(arr, n, m);
if (l != -1) {
cout << l * (n - l - 1) << endl;
}
else {
cout << "0" << endl;
}
}
}
return 0;
}
정렬 때리고, m 값이 정렬된 배열의 처음이나 마지막 값이면, 0 출력
그렇지 않다면, m의 위치 정보를 찾아야하는데, find는 O(n)이기때문에 느리기에 이진탐색 사용해서 찾고, 있으면, 위치 * (n - 위치 - 1) 반환, 없으면 0
'알고리즘' 카테고리의 다른 글
프로그래머스 - 게임 맵 최단거리 (c++) (0) | 2025.02.23 |
---|---|
Lv. 3 나무 섭지 - C++ (0) | 2024.12.10 |
Lv. 3 징검다리 - C++ (0) | 2024.12.10 |
Lv. 3 함께하는 효도 - C++ (0) | 2024.12.10 |
[Algorithm] Introduction to Algorithms 개정 3판 답지 (0) | 2024.02.18 |