5158. 排头兵

单点时限: 1.0 sec

内存限制: 256 MB

n 个士兵需要被排成一排。由于每两个士兵的身高都互不相同,因此我们用 1,2,nn 个整数来分别表示他们的身高,不妨设第 i 个士兵的身高为 i(1in)

现在,队列中身高为 1,2,mm 个士兵的位置已经确定,你需要确定剩下 nm 个士兵的位置,确定完毕之后,你得到一个士兵的队形: p1,p2,pn

接下来,首长会从你编排的队形中等概率随机抽取一个连续的区间 (l,r)1lrn,他会检查 pl,pl+1,pr 这个区间的士兵们能否组成一列良好的小队。一列士兵被称为良好的小队,当且仅当他们中最高的一个士兵站在排头或者排尾。例如,当 n=5 时,如果士兵的队形是 1,3,5,2,4 ,那么当首长抽取 (1,3) 时,就得到一支良好的小队,因为 1,3,5 中最高的士兵处于排尾 ;当首长抽取 (3,5) 时,也得到一支良好的小队,因为 5,2,4 中最高的士兵处于排头;而当首长抽取 (2,4) 时,就不能得到一支良好的小队,因为 3,5,2 中最高的士兵既不处于排头也不处于排尾。

你希望首长在抽查的时候抽中一列良好的小队的概率尽可能大,请你给出最优的编排方案。

输入格式

首先输入一个正整数 T ,表示数据组数。

对于每组数据:

第一行,两个整数 n,m ,分别表示士兵的总数目以及已经确定位置的士兵数目。

第二行, n 个整数,第 i 个数表示 ai ,如果 ai=0 则表示第 i 个位置的士兵还没有被确定;如果 ai0 则表示第 i 个位置的士兵是 ai 号士兵(即他的身高为 ai)。数据保证恰有 m 个位置满足 ai0

保证 T 组测试数据的 n 不超过 500

输出格式

对于每组数据,输出一行,n 个整数 p1,p2pn 表示你编排的士兵队形,整数之间用一个空格隔开,最后一个整数后应当紧跟一个换行,而不允许有行末空格。你的队形必须是一个 1,2,n 组成的排列,并且对于任意的 1in ,若输入数据中 ai 不为 0 ,则必须有 pi=ai 。你的答案需要在满足限制的情况下最大化首长抽中良好小队的概率,如果有多种合法的方案,你可以输出任何一种。

样例

Input
3
3 0
0 0 0
4 1
0 1 0 0
10 4
0 3 0 0 1 0 0 4 0 2
Output
1 2 3
2 1 3 4
10 3 9 8 1 7 6 4 5 2

提示

【数据范围】

1T500

1n500,0mn,n5000aim ,对于任意的 1i,jn 若满足 ai0,aj0,ij 则必有 aiaj

16 人解决,29 人已尝试。

20 份提交通过,共有 104 份提交。

6.1 EMB 奖励。

创建: 1 年,10 月前.

修改: 1 年,9 月前.

最后提交: 1 年,7 月前.

来源: N/A

题目标签
DP