Sắp xếp lại

View as PDF

Submit solution

Points: 200.00 (partial)
Time limit: 1.0s
Memory limit: 1G
Input: stdin
Output: stdout

Author:
Problem type
Allowed languages
C, C++, GAS64, Pascal, Perl, PHP, Python, Sed, TCL, Text

Cho hoán vị ~P~ = {~p_1~, ~p_2~,....~p_n~} của {1, 2,....,~n~}. Người ta muốn sắp xếp lại hoán vị này để thu được hoán vị {1, 2,....,~n~} bằng cách như sau: "Lần lượt xét các vị trí 1, 2,...,~n~. Với mỗi vị trí ~i~ liên tục đổi chỗ ~p_i~ cho số đằng trước nó chừng nào số này lớn hơn ~p_i~"

Ví dụ, với hoán vị {3,2,1,5,4} qui trình đổi chỗ thực hiện như sau:

  • Với ~p_1~ = 3: (3,2,1,5,4) có 0 phép đổi chỗ
  • Với ~p_2~ = 2 : (3,2,1,5,4) -> (2,3,4,5,4) có 1 phép đổi chỗ
  • Với ~p_3~ = 1 : (2,3,1,5,4) -> (2,1,3,5,4) -> (1,2,3,5,4) có 2 phép đổi chỗ
  • Với ~p_4~ = 5 : (1,2,3,5,4) có 0 phép đổi chỗ
  • Với ~p_5~ = 4 : (1,2,3,5,4) -> (1,2,3,4,5) có 1 phép đổi chỗ

Cho biết số phép đổi chỗ của các vị trí 1, 2, ..., ~n~ . Hãy xác định hoán vị ban đầu

Dữ liệu vào: Dòng đầu tiên ghi số nguyên dương ~T~ <= 5 là số lượng tests. Tiếp theo là ~T~ nhóm dòng, mỗi nhóm mô tả một test có cấu trúc:

  • Dòng 1: Ghi số nguyên dương ~n~ (1 <= ~n~ <= 200000)
  • Dòng 2: Ghi các số nguyên ~w_1~, ~w_2~,...,~w_n~ với ~W_i~ là số lần đổi chỗ mà ~p_i~ thực hiện (~i~ =1,2,..., ~n~) .

Kết quả: In ra ~T~ dòng, dòng thứ ~i~ ghi ~n~ số nguyên mô tả hoán vị ~p_1~, ~p_2~,....~p_n~ ban đầu ứng với test thứ (~i~ =1,2,..., ~T~ . Thứ tự test là thứ tự xuất hiện trong input.

Ví dụ:
input:
2
3
0 1 0
5
0 1 2 0 1
output
2 1 3
3 2 1 5 4
  • Có 30% số test có ~n~ <= 10 ứng với 30% số điểm;
  • Có 10% số test có ~n~ <= 100 ứng với 10% số điểm;
  • Có 10% số test có ~n~ <= 500 ứng với 10% số điểm;
  • Có 20% số test có ~n~ <= 5000 ứng với 20% số điểm;
  • Có 30% số test có ~n~ <= 2x~10^5~ ứng với 30% số điểm;

Comments

Please read the guidelines before commenting.


There are no comments at the moment.