• B. Box


    B. Box

    time limit per test

    1 second

    memory limit per test

    256 megabytes

    input

    standard input

    output

    standard output

    Permutation pp is a sequence of integers p=[p1,p2,…,pn]p=[p1,p2,…,pn], consisting of nn distinct (unique) positive integers between 11 and nn, inclusive. For example, the following sequences are permutations: [3,4,1,2][3,4,1,2], [1][1], [1,2][1,2]. The following sequences are not permutations: [0][0], [1,2,1][1,2,1], [2,3][2,3], [0,1,2][0,1,2].

    The important key is in the locked box that you need to open. To open the box you need to enter secret code. Secret code is a permutation pp of length nn.

    You don't know this permutation, you only know the array qq of prefix maximums of this permutation. Formally:

    • q1=p1q1=p1,
    • q2=max(p1,p2)q2=max(p1,p2),
    • q3=max(p1,p2,p3)q3=max(p1,p2,p3),
    • ...
    • qn=max(p1,p2,…,pn)qn=max(p1,p2,…,pn).

    You want to construct any possible suitable permutation (i.e. any such permutation, that calculated qq for this permutation is equal to the given array).

    Input

    The first line contains integer number tt (1≤t≤1041≤t≤104) — the number of test cases in the input. Then tt test cases follow.

    The first line of a test case contains one integer nn (1≤n≤105)(1≤n≤105) — the number of elements in the secret code permutation pp.

    The second line of a test case contains nn integers q1,q2,…,qnq1,q2,…,qn (1≤qi≤n)(1≤qi≤n) — elements of the array qq for secret permutation. It is guaranteed that qi≤qi+1qi≤qi+1 for all ii (1≤i

    The sum of all values nn over all the test cases in the input doesn't exceed 105105.

    Output

    For each test case, print:

    • If it's impossible to find such a permutation pp, print "-1" (without quotes).
    • Otherwise, print nn distinct integers p1,p2,…,pnp1,p2,…,pn (1≤pi≤n1≤pi≤n). If there are multiple possible answers, you can print any of them.

    Example

    input

    Copy

    4
    5
    1 3 4 5 5
    4
    1 1 3 4
    2
    2 2
    1
    1
    

    output

    Copy

    1 3 4 5 2 
    -1
    2 1 
    1 
    

    Note

    In the first test case of the example answer [1,3,4,5,2][1,3,4,5,2] is the only possible answer:

    • q1=p1=1q1=p1=1;
    • q2=max(p1,p2)=3q2=max(p1,p2)=3;
    • q3=max(p1,p2,p3)=4q3=max(p1,p2,p3)=4;
    • q4=max(p1,p2,p3,p4)=5q4=max(p1,p2,p3,p4)=5;
    • q5=max(p1,p2,p3,p4,p5)=5q5=max(p1,p2,p3,p4,p5)=5.

    It can be proved that there are no answers for the second test case of the example.

    \=========================================================================

    模拟一下,放个队列即可,每当a值不等于上一个a值,那就说明了这个位置已经确定,一旦我们遇到一个确定位置,就把上一个位置到本位置之间的数字全部加入队列,这就是小于本位置的全部可能,当该取出数字的时候队列为空则是无解

    1. # include
    2. #include
    3. # include
    4. # include
    5. # include
    6. # include
    7. using namespace std;
    8. typedef long long int ll;
    9. int a[100000+10];
    10. int ans[100000+10];
    11. queue<int>q;
    12. vector<int>v;
    13. int main()
    14. {
    15. int t;
    16. cin>>t;
    17. while(t--)
    18. {
    19. int n;
    20. cin>>n;
    21. while(!q.empty())
    22. q.pop();
    23. v.clear();
    24. for(int i=1; i<=n; i++)
    25. {
    26. cin>>a[i];
    27. ans[i]=0;
    28. if(a[i]!=a[i-1])
    29. {
    30. v.push_back(a[i]);
    31. ans[i]=a[i];
    32. }
    33. }
    34. int now=0;
    35. int last=1,flag=0;
    36. for(int i=1; i<=n; i++)
    37. {
    38. if(ans[i])
    39. {
    40. for(int j=last;j
    41. q.push(j);
    42. last=v[now]+1;
    43. now++;
    44. }
    45. else
    46. {
    47. if(q.empty())
    48. {
    49. flag=1;
    50. break;
    51. }
    52. else
    53. {
    54. ans[i]=q.front();
    55. q.pop();
    56. }
    57. }
    58. }
    59. if(flag)
    60. {
    61. cout<<-1<
    62. continue;
    63. }
    64. for(int i=1;i<=n;i++)
    65. {
    66. cout<" ";
    67. }
    68. cout<
    69. }
    70. return 0;
    71. }

  • 相关阅读:
    百度飞桨公布最新成果:凝聚535万开发者,服务20万家企事业单位
    K8s最基本概念
    惊艳!Linux 中迷人的 Shell 脚本工具
    Nginx简单使用
    中颖单片机SH367309全套量产PCM,专用动力电池保护板开发资料
    达梦数据库表数量查询与实际情况不一致?看看是不是有特殊表名
    Docker安装以及修改Docker的默认存储路径
    环境部署搭建
    14-js正则表达式
    vue基础知识和原理(二)
  • 原文地址:https://blog.csdn.net/jisuanji2606414/article/details/126323261