Codeforces Round #756 (Div. 3) C

 1 #include<iostream>
 2 using namespace std;
 3 int a[2000005],n;
 4 void slove()
 5 {
 6     cin>>n;
 7     for(int i=1;i<=n;i++){
 8         cin>>a[i];
 9     }
10     if(a[1]!=n&&a[n]!=n){
11         cout<<-1<<endl;
12         return;
13     }
14     int flag=0;
15     if(a[1]==n)flag=1;
16     if(flag){
17         cout<<n<<" ";
18         for(int i=n;i>=2;i--){
19             cout<<a[i]<<" ";
20         }
21     }
22     else{
23         for(int i=n-1;i>=1;i--){
24             cout<<a[i]<<" ";
25         }
26         cout<<n<<" ";
27     }
28     puts("");
29 }
30 int main()
31 {
32     int __;
33     cin>>__;
34     while(__--)slove();
35 }
36 //结论题,由题可知,每次只删除两端中较小的一端,所以在最后输出的数组中一定n在两端,否则输出-1
37 //因此,可以构造答案数组,将n在的那一端保留剩下的n-1个数倒序(每次比较由于n比其他数大,所以剩下的n-1个数会交换位置)

 

posted @ 2021-11-26 14:32  20kmのshimakaze  阅读(40)  评论(0)    收藏  举报