#include <iostream>
#include <vector> // vector 사용
#include <algorithm>
using namespace std;
int main(int argc, char **argv){
int N, M;
int x;
scanf("%d",&N);
vector<int> v(N); // N 크기의 벡터 생성
for(int i=0; i<N; i++){
scanf("%d",&v[i]); // 상근이 값 입력받기
}
sort(v.begin(), v.end()); // vector의 시작과 끝으로 정렬
scanf("%d", &M);
for(int i=0; i<M; i++){
scanf("%d", &x);
auto low = lower_bound(v.begin(), v.end(), x); // auto : 타입 추론, 매개변수에는 사용 불가
auto up = upper_bound(v.begin(), v.end(), x);
//upper_bound : binary search로 해당 숫자가 끝나는 위치 반환
//lower_bound : binary search로 해당 숫자가 시작하는 위치 반환
printf("%ld ", up - low);
}
return 0;
}
처음으로 lower_bound, upper_bound STL과 vector를 사용해보았다. 아직 미숙해서 인터넷을 열심히 찾아보았다. 다음에 보지 않고 풀어보기 필수.
vector를 sort 할 때는 시작과 끝을 v.begin(), v.end()를 사용한다.
upper_bound : binary search로 해당 숫자가 끝나는 위치 반환 (주어진 값보다 크거나 같으면서 제일 작은 값)
lower_bound : binary search로 해당 숫자가 시작하는 위치 반환 (주어진 값보다 크면서 제일 작은 값)
C++에는 auto라고 타입 추론하는 변수형이있다. 매개변수에는 사용이 불가능하다. 하지만 주소를 저장할때는 참 좋은 것 같다.