题意就是将给的数列,数字大的尽量在前(最大的要在最前,应该是没有专门设置不是最大数字在最前的样例的,不然太恶心了),但是这个数和其之后的数要一起走,并且相对位置不变
思路在写的时候一起写了(其实是自己被自己绕晕了,不得不写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; 
}