题意就是将给的数列,数字大的尽量在前(最大的要在最前,应该是没有专门设置不是最大数字在最前的样例的,不然太恶心了),但是这个数和其之后的数要一起走,并且相对位置不变
思路在写的时候一起写了(其实是自己被自己绕晕了,不得不写qaq)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
int a[100005],b[100005],c[100005],d[100005];
for(int i=1;i<=n;i++)
{
cin>>a[i];//原数组
c[a[i]]=i;//元素位置
b[i]=a[i];//复制原数组
d[a[i]]=1;//元素存在判定
}
sort(a+1,a+1+n);//加个1好处理位置,不然的情况我已经经历过了
int p=n;
for(int i=n;i>=1;i--)
{
if(d[a[i]])// 判断是否被输出,直到找到未被输出的最大数
{
int q = c[a[i]];//最大数字的位置
for(int k=q;k<=p;k++)
{
cout<<b[k]<<" ";//找到最大数位置后从原数组输出其之后的所有数
d[b[k]]=0;//更换输出后该数的标记
}
p=q-1;//回到最大数之前开始遍历
}
}
cout<<endl;
}
return 0;
}
京公网安备 11010502036488号