PS/자료 구조[Data Structure]

백준 7662 이중 우선순위 큐(c++)

SeungbeomKim 2023. 2. 13. 21:23

https://www.acmicpc.net/problem/7662

 

7662번: 이중 우선순위 큐

입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적

www.acmicpc.net

이 문제는 c++의 set헤더를 이용하면 쉽게 풀 수 있는 문제였습니다.

multiset 헤더는 set헤더와는 다르게 중복된 값을 저장할 수 있기에, 이중 우선순위 큐를 풀기 위해서는 multiset을 이용해야 합니다.

왜냐하면 문제에서 D -1 연산을 했을때 최소값이 중복되더라도 한 번만 제거하기 때문입니다.

 

erase() 함수를 통해 원소를 삭제할 수 있다. (erase함수 안에 인자로 값 자체를 넣으면 해당 값을 가진 모든 원소가 삭제 된다. 하지만 주소 값을 넣으면 그 주소에 해당 된 원소만 삭제된다.)

더불어 end()함수는 가장 끝 값의 다음 주소을 접근하기 때문에, 가장 끝 주소값을 접근하기 위해 해당 주소값을 다음과 같이 지워줘야 합니다.

auto iter_end = ms.end();
iter_end--;