Hàng đợi ưu tiên duy trì Top K phần tử lớn nhất
Hệ thống chấm thi trực tuyến của AI Empire Academy cần theo dõi ngưỡng điểm để lọt vào Top K thí sinh dẫn đầu trong suốt quá trình diễn ra kỳ thi (1 ≤ K ≤ 104).
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: std priority queue, loops, fast io.
Nội dung đề bài
Mục tiêu kiến thức
- Áp dụng cấu trúc dữ liệu Hàng đợi ưu tiên (
std::priority_queue) trong C++. - Kỹ thuật Min-Heap đảo ngược bằng
std::greater<T>để duy trì K phần tử lớn nhất trong luồng dữ liệu liên tục. - Tối ưu độ phức tạp thời gian từ O(N log N) xuống O(N log K) với không gian bộ nhớ tiết kiệm O(K).
- Xử lý dữ liệu trực tuyến (Online Streaming Data).
Mô tả bài toán
Hệ thống chấm thi trực tuyến của AI Empire Academy cần theo dõi ngưỡng điểm để lọt vào Top K thí sinh dẫn đầu trong suốt quá trình diễn ra kỳ thi (1 ≤ K ≤ 104).
Có N sự kiện nộp bài liên tiếp được ghi nhận với điểm số X1, X2, …, XN (1 ≤ N ≤ 105, 0 ≤ Xi ≤ 109). Sau mỗi lượt nộp bài thứ i (1 ≤ i ≤ N):
- Nếu số lượng bài đã nộp chưa đủ K thí sinh (i < K), in ra
-1(chưa đủ dữ liệu xác định ngưỡng Top K). - Nếu số lượng bài đã nộp ≥ K, hãy in ra điểm số của thí sinh đang đứng ở vị trí thứ K (tức là điểm số nhỏ nhất trong Top K thí sinh có điểm cao nhất tính đến thời điểm đó).
Quy ước nộp bài
- Chỉ cần viết một chương trình đọc
stdinvà in rastdout. Bài này không yêu cầu viết hàm. - Không dùng
coutđể in lời nhắc trước khi đọc dữ liệu. Lời nhắc sẽ lọt vàostdoutvà làm bài sai. - Chỉ in đúng nội dung ở mục Output. Không in thêm nhãn, dòng trống hay ký tự thừa.
- Output được so khớp từng ký tự, phân biệt chữ hoa/thường và dấu câu.
Input
- Dòng 1: Gồm 2 số nguyên N và K (1 ≤ K ≤ N ≤ 105, K ≤ 104).
- Dòng 2: Gồm N số nguyên X1, X2, …, XN (0 ≤ Xi ≤ 109) đại diện cho điểm số của các lượt nộp.
Output
In trên một dòng gồm N số nguyên cách nhau bởi dấu cách, số thứ i là kết quả sau lượt nộp thứ i.
Ràng buộc
- 1 ≤ K ≤ 104.
- K ≤ N ≤ 105.
- 0 ≤ Xi ≤ 109.
- Thời gian chạy: 1000ms.
- Bộ nhớ tối đa: 256MB.
Ví dụ 1
Input
6 3
10 20 15 30 5 25Output
-1 -1 10 15 15 20Giải thích
- Sau i=1 (10): Chưa đủ 3 phần tử → in
-1. - Sau i=2 (20): Chưa đủ 3 phần tử → in
-1. - Sau i=3 (15): Top 3 là {10, 15, 20}, phần tử nhỏ nhất là
10. - Sau i=4 (30): Top 3 là {15, 20, 30}, phần tử nhỏ nhất là
15. - Sau i=5 (5): 5 nhỏ hơn 15 nên Top 3 vẫn là {15, 20, 30}, phần tử nhỏ nhất là
15. - Sau i=6 (25): Top 3 là {20, 25, 30}, phần tử nhỏ nhất là
20.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
