Queue Sort(mở Codeforces trong tab mới)
Cho mảng a. Mỗi thao tác lấy phần tử đầu đưa về cuối, rồi đổi chỗ nó với phần tử đứng trước chừng nào nó nhỏ hơn hẳn phần tử đó. Tìm số thao tác ít nhất để mảng không giảm, hoặc −1.
Test mẫu & giải thích
5 5 6 4 1 2 5 7 4 5 3 7 8 6 2 6 4 3 1 2 6 4 4 5 2 4 2 3 2 2 3
2 6 -1 -1 0
Test 1
Xét test đầu a = [6,4,1,2,5]. Thao tác 1: đưa 6 xuống cuối được [4,1,2,5,6], rồi so 6 với phần tử liền trước là 5 — vì 6 không nhỏ hơn 5 nên dừng, mảng thành [4,1,2,5,6]. Thao tác 2: đưa 4 xuống cuối được [1,2,5,6,4], rồi cho 4 nổi ngược lên: 4<6 nên đổi chỗ thành [1,2,5,4,6], tiếp tục 4<5 nên đổi chỗ thành [1,2,4,5,6], đến khi so với 2 thì 4 không nhỏ hơn 2 nên dừng. Sau đúng 2 thao tác mảng đã không giảm nên đáp án là 2.
Test 2
Với test cuối [2,2,3] đã sẵn không giảm (2≤2≤3) nên không cần thao tác nào, đáp án 0.