K phần tử lớn nhất
Xem dạng PDF
Gửi bài giải
Điểm:
600,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Input:
stdin
Output:
stdout
Nguồn bài:
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch
Cho mảng ~A~ gồm ~N~ số nguyên và số nguyên dương ~K~. Hãy tìm và in ra ~K~ phần tử lớn nhất của mảng theo thứ tự giảm dần.
Yêu cầu: Hãy cố gắng sử dụng cấu trúc dữ liệu Hàng đợi ưu tiên (Priority Queue) để giải quyết bài toán với bộ nhớ ~O(K)~ thay vì sắp xếp toàn bộ mảng.
Dữ liệu
- Dòng đầu tiên chứa hai số nguyên dương ~N~ và ~K~ (~1 \le K \le N \le 10^5~).
- Dòng thứ hai chứa ~N~ số nguyên ~A_1, A_2, ..., A_N~ (~-10^9 \le A_i \le 10^9~), cách nhau bởi khoảng trắng.
Kết quả
In ra một dòng duy nhất chứa ~K~ số nguyên lớn nhất theo thứ tự giảm dần, phân cách nhau bởi một khoảng trắng.
Ví dụ
Input
6 3
7 2 9 1 5 8
Output
9 8 7
Giải thích
Ta cần tìm ~K = 3~ phần tử lớn nhất.
Các phần tử lớn nhất trong mảng là ~9, 8, 7~. Khi in ra theo thứ tự giảm dần ta được kết quả là 9 8 7.
Bình luận