DHBB 2023 - CBH - 11 - Sắp xếp
Xem dạng PDFTrong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài
Nhận thấy quân địch đang trong tình trạng suy kiệt cả về số lượng lẫn chất lượng, Darth Vader đã ra lệnh cho đô đốc Sakerm lập tức chuẩn bị quân đội để tổng tấn công.
Hiện tại, đô đốc Sakerm đang gấp rút chuẩn bị quân đội. Quân đội của ông có ~N~ người lính, mỗi tên lính trong hàng ngũ đều có một chỉ số riêng biệt. Dãy chỉ số của ~N~ người lính là một hoán vị của dãy số nguyên từ ~1~ đến ~N~. Để đoàn quân tinh nhuệ của ông được tối ưu sức mạnh, Sakerm phải chỉnh đốn lại hàng ngũ sao cho chỉ số của các người lính trong hàng tăng dần.
Trong quá khứ, ông thường dùng các thuật toán Bubble Sort để chỉnh đốn hàng ngũ. Tuy nhiên do đang gấp rút và thuật toán kia lại tốn quá nhiều thời gian nên buộc Sakerm phải tìm cách sắp xếp khác. May mắn cho ông, tất cả các lính tinh nhuệ của ông đều đã được rèn luyện bài bản, chỉ cần gọi tên thì ngay lập tức một chuỗi hành động sau sẽ được người lính vừa được gọi tên ấy thực hiện:
Nếu người lính bên phải có chỉ số nhỏ hơn người lính được gọi thì hai người lính này sẽ đổi chỗ cho nhau và quá trình này sẽ lặp đi lặp lại đến khi không còn người lính bên phải có chỉ số nhỏ hơn;
Ngược lại, nếu người lính bên trái có chỉ số lớn hơn người lính được gọi thì hai người lính này sẽ đổi chỗ cho nhau và quá trình này sẽ lặp đi lặp lại đến khi không còn người lính bên trái có chỉ số lớn hơn.
Mỗi người lính khi được gọi tên sẽ thực hiện chuỗi hành động trên chỉ tốn ~1~ giây.
Sakerm nhận thấy rằng không nhất thiết phải gọi tên toàn bộ ~N~ người lính mà chỉ cần gọi một số người trong đó thì toàn bộ hàng ngũ sẽ được sắp xếp. Sakerm không giỏi tính toán nên ông rất muốn biết xem số lượng tên lính tối thiểu ông cần gọi tên là bao nhiêu. Ngoài ra, có thể có nhiều tập thỏa mãn có cùng số lượng phần tử. Là một người ham học hỏi, Sakerm tò mò muốn biết tập bé thứ ~K~ trong thứ tự từ điển là tập nào.
Yêu cầu: Bạn hãy giúp Sakerm sắp xếp quân ngũ nhằm chuẩn bị tổng phản công. Dữ liệu đảm bảo luôn có nhiều hơn ~K~ tập thỏa mãn.
Input
Dòng đầu chứa hai số nguyên ~N, K~ ~(N \le 10^5, K \le 10^{18})~;
Dòng thứ hai chứa ~N~ số nguyên là hoán vị của dãy số từ ~1~ đến ~N~.
Output
Dòng đầu chứa số nguyên ~x~ là số lượng người lính cần gọi tên ít nhất;
~x~ dòng sau, mỗi dòng chứa một số nguyên thuộc tập bé thứ ~K~ theo thứ tự từ điển cần tìm, được liệt kê theo thứ tự tăng dần.
Scoring
| Subtask | Điểm | Ràng buộc |
|---|---|---|
| 1 | ~20\%~ | ~N \le 6, K=1~ |
| 2 | ~30\%~ | ~N \le 10^5, K=1~ |
| 3 | ~50\%~ | Không có ràng buộc gì thêm |
Sample Input 1
5 1
3 5 1 4 2
Sample Output 1
3
1
2
4
Notes
Sau khi gọi tên người lính có chỉ số ~1~ (tức là ở vị trí ~3~ trong dãy ban đầu), dãy trở thành ~1, 3, 5, 4, 2~;
Sau khi gọi tên người lính có chỉ số ~2~, dãy trở thành ~1, 2, 3, 5, 4~;
Sau khi gọi tên người lính có chỉ số ~4~, dãy trở thành ~1, 2, 3, 4, 5~.
Như vậy, sau ~3~ lần gọi tên, quân đoàn đã được sắp xếp, và không có cách nào có số lần gọi bé hơn cũng như thứ tự từ điển bé hơn ~1, 2, 4~.
Bình luận