E. Restoring the Permutation

E. Restoring the Permutation

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

A permutation is a sequence of nn integers from 11 to nn, in which all numbers occur exactly once. For example, [1][1], [3,5,2,1,4][3,5,2,1,4], [1,3,2][1,3,2] are permutations, and [2,3,2][2,3,2], [4,3,1][4,3,1], [0][0] are not.

Polycarp was presented with a permutation pp of numbers from 11 to nn. However, when Polycarp came home, he noticed that in his pocket, the permutation pp had turned into an array qq according to the following rule:

  • qi=max(p1,p2,…,pi)qi=max(p1,p2,…,pi).

Now Polycarp wondered what lexicographically minimal and lexicographically maximal permutations could be presented to him.

An array aa of length nn is lexicographically smaller than an array bb of length nn if there is an index ii (1≤i≤n1≤i≤n) such that the first i−1i−1 elements of arrays aa and bb are the same, and the ii-th element of the array aa is less than the ii-th element of the array bb. For example, the array a=[1,3,2,3]a=[1,3,2,3] is lexicographically smaller than the array b=[1,3,4,2]b=[1,3,4,2].

For example, if n=7n=7 and p=[3,2,4,1,7,5,6]p=[3,2,4,1,7,5,6], then q=[3,3,4,4,7,7,7]q=[3,3,4,4,7,7,7] and the following permutations could have been as pp initially:

  • [3,1,4,2,7,5,6][3,1,4,2,7,5,6] (lexicographically minimal permutation);
  • [3,1,4,2,7,6,5][3,1,4,2,7,6,5];
  • [3,2,4,1,7,5,6][3,2,4,1,7,5,6];
  • [3,2,4,1,7,6,5][3,2,4,1,7,6,5] (lexicographically maximum permutation).

For a given array qq, find the lexicographically minimal and lexicographically maximal permutations that could have been originally presented to Polycarp.

Input

The first line contains one integer tt (1≤t≤1041≤t≤104). Then tt test cases follow.

The first line of each test case contains one integer nn (1≤n≤2⋅1051≤n≤2⋅105).

The second line of each test case contains nn integers q1,q2,…,qnq1,q2,…,qn (1≤qi≤n1≤qi≤n).

It is guaranteed that the array qq was obtained by applying the rule from the statement to some permutation pp.

It is guaranteed that the sum of nn over all test cases does not exceed 2⋅1052⋅105.

Output

For each test case, output two lines:

  • on the first line output nn integers — lexicographically minimal permutation that could have been originally presented to Polycarp;
  • on the second line print nn integers — lexicographically maximal permutation that could have been originally presented to Polycarp;

Example

input

Copy

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

output

Copy

3 1 4 2 7 5 6 
3 2 4 1 7 6 5 
1 2 3 4 
1 2 3 4 
3 4 5 1 2 7 6 
3 4 5 2 1 7 6 
1 
1 

=========================================================================

仅靠循环的话加上一些优化能过9个点,第10个卡住,字典序最小的是容易做的,on即可,而字典序最大的容易找重复,应该用优先队列,每当遇见一个确定位置,就加入上一个确定位置的数字到该确定位置数字之间的数字。每次取最大值即可,也是on,这样就不会超时了

#include<iostream>
#include<string>
#include<vector>
#include<string.h>
#include<set>
#include<algorithm>
#include<queue>
#include<map>
#include<stdio.h>
#include<math.h>
using namespace std;

typedef long long int  ll;

int a[200000+10];

bool book1[200000+10];
bool book[200000+10];
int ans1[200000+10];
int ans2[200000+10];
priority_queue<int>q;
vector<int>v;
int main()
{


    int t;

    cin>>t;

    while(t--)
    {
        int n;

        cin>>n;
        for(int i=1; i<=n; i++)
        {
            ans1[i]=0;
            ans2[i]=0;
            book1[i]=0;
            book[i]=0;
        }
        v.clear();

        for(int i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);

            if(a[i]!=a[i-1])
            {
                book1[a[i]]=1;
                book[i]=1;
                ans1[i]=a[i];
                ans2[i]=a[i];
                v.push_back(a[i]);
            }
        }

        int pre=a[1],last=1,now=-1;

        while(!q.empty())
            q.pop();

        for(int i=1; i<=n; i++)
        {
            if(book[i])
            {
                pre=a[i];
                now++;
                int bb;
                if(now==0)
                    bb=1;
                else
                    bb=v[now-1]+1;
                for(int j=bb; j<v[now]; j++)
                {
                    q.push(j);
                }
            }
            else
            {
                ans2[i]=q.top();
                q.pop();
                for(int j=last; j<=pre; j++)
                {
                    if(!book1[j])
                    {
                        ans1[i]=j;
                        book1[j]=1;
                        last=j;
                        break;
                    }
                }
            }
        }


        for(int i=1; i<=n; i++)
        {
            cout<<ans1[i]<<" ";
        }
        cout<<endl;
        for(int i=1; i<=n; i++)
        {
            cout<<ans2[i]<<" ";
        }
        cout<<endl;
    }



    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
翻译This SiO2 shell is a key component in the mechanism for reversible actuation, as illustrated by finite element analysis (FEA) in Fig. 1C. An increase in temperature transforms the SMA (nitinol) from the martensitic to the austenitic phase, causing the 3D structure to flatten into a 2D shape. The responses of the SMA elements at the joints act as driving forces to deform the PI skeleton. This process also elastically deforms the SiO2 shell, resulting in a counter force that limits the magnitude of the deformation. The change in shape ceases when the forces from the shell balance those from the joints (right frame in Fig. 1C). Upon a reduction in temperature, the SMA changes from the austenitic back to the martensitic phase, thereby reducing the force produced by the SMA at the joints to zero. The elastic forces associated with the shell then push the entire system back to the original 3D geometry (left frame in Fig. 1C). Figure S3A simulates the moments generated by the SMA and the SiO2 shell. In the FEA model, the SiO2 shell appears on both the outer and inner surfaces of the 3D robot, consistent with experiments (fig. S3B). Although a single layer of the SiO2 shell at the outer or inner surface can also provide restoring force, the double-layer shell structure follows naturally from the conformal deposition process. This actuation scheme allows for reversible shape transformations using a one-way shape memory material. Without the shell, the structure only supports a single change in shape, from 3D to 2D, as illustrated in fig. S3C. Figure 1D shows optical images of a freestanding 3D peekytoe crab on the edge of a coin, highlighting the preserved 3D geometry enabled by the SiO2 shell after release from the elastomer substrate. Other 3D structures in geometries that resemble baskets, circular helices, and double-floor helices also exhibit high shape storage ratios (>85%) after cycles of heating and cooling (fig. S4). This ratio (s) is defined as s = 1 − |L1 − L0|/L0 × 100%, where L0 and L1 are the distances between the bonding sites at both ends at the initial stage and subsequent stages, respectively
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qinsanma and Code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值