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

  • 相关阅读:
    责任链模式应用案例
    深度学习论文翻译解析(二十一):High-Performance Large-Scale Image Recognition Without Normalization
    Rust学习笔记:基础工具和基本名词
    【面试经典150 | 链表】两数相加
    操作系统中文件系统的实现和分配方式探析(下)
    单目标应用:粒子群优化算法(PSO)求解微电网优化MATLAB
    重磅官宣|数说故事战略并购考古加,打造多样化客户服务生态
    ctfshow-web-web15 Fishman
    Spring MVC工作原理简介说明
    GSCoolink GSV2702替EP92A3E HDMI 2.0交换机
  • 原文地址:https://blog.csdn.net/jisuanji2606414/article/details/126323261