cpp-010Đọc toàn bộ đề miễn phí

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).

C++Trung bình30 phút

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ủ đề

priority queueheapstreaming datadata structures

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.
3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.