Mô tả bài toán
Dãy rỗng ban đầu, n truy vấn:
- Loại 1 x: thêm
xvào cuối. - Loại 2: in phần tử đầu và xóa nó.
- Loại 3: sắp xếp dãy tăng dần.
Ví dụ
n=9, queries={{1,5},{1,4},{1,3},{1,2},{1,1},{2,0},{3,0},{2,0},{3,0}}. Đầu ra: 5 1.
Thuật toán (Hai cấu trúc dữ liệu)
- Hàng đợi
qlưu phần tử chưa sắp xếp (thêm vào đuôi). - Hàng đợi ưu tiên
priq(max-heap lưu giá trị âm) lưu phần tử đã sắp xếp. - Truy vấn 1: push vào
. - Truy vấn 2: nếu
rỗng → lấy từ; ngược lại lấy từ. - Truy vấn 3: chuyển toàn bộ
vào(lưu giá trị âm để max-heap thành min-heap).
Đoạn mã C++
#include <bits/stdc++.h>
using namespace std;
void solve(int n, vector<pair<int,int>> queries){
priority_queue<int> priq; // max-heap of -value
queue<int> q;
for(int i=0;i
Đầu vào / Đầu ra
Input: 9, {{1,5},{1,4},{1,3},{1,2},{1,1},{2,0},{3,0},{2,0},{3,0}}
Output: 5 1