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 và code bạn nộp đượ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 stdin và in ra stdout. 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ào stdout và 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 25
Output
-1 -1 10 15 15 20
Giả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.
