upper_bound와 lower_bound를 이용해서 boj 10816번을 풀어보았다.
https://www.acmicpc.net/problem/10816
뒤늦게 map이라는 컨테이너를 알아버려 더 쉽게 풀 수 있었던 점이 조금 아쉽긴했다.
우선 upper_bound나 lower_bound를 사용하려면
탐색을 할 배열 혹은 벡터가 오름차순으로 정렬되어 있어야한다.
아래코드는 n번 만큼의 수를 입력받고 벡터에 푸쉬한다음,
m번동안, 입력 받은 수의 갯수를 구하는 구현이다.
#include <iostream>
#include <algorithm>
#include <vector>
#pragma warning(disable:4996)
#include <sstream>
#include <math.h>
#define endl '\n'
using namespace std;
typedef long long ll;
int m, n;
int main(int argc, const char * argv[]){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(nullptr);
cin >> n;
vector<int> v(n);
for(int i=0; i<n; i++){
cin >> v[i];
}
sort(v.begin(), v.end());
cin >> m;
int input;
for(int i=0; i<m; i++){
cin >> input;
auto a = upper_bound(v.begin(), v.end(), input);
auto b = lower_bound(v.begin(), v.end(), input);
cout << a-b << endl;
}
return 0;
}