• 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. }

  • 相关阅读:
    FPGA笔试
    软件的开发模型
    iOS 内购(In-App Purchase)详解
    【英雄哥七月集训】第 27天:图
    ssl/tls 自签证书
    MySQL数据库基础
    装饰模式Decorator
    【从零开始学习Redis | 第五篇】基于布隆过滤器解决Redis的穿透问题
    Pytorch知识点学习
    【解锁未来】探索Web3的无限可能性-01
  • 原文地址:https://blog.csdn.net/jisuanji2606414/article/details/126323261