#include <bits/stdc++.h>
#include <iostream>
using namespace std;
struct node
{int data;int next;//记录下一个元素死亡值int pos;//用来记录每个元素的位置*/
} a[100001],val[100000];
int main()
{int t;while(~scanf("%d",&t)){int l=0;while(t--){int n;scanf("%d",&n);for(int i=0; i<n; ++i){cin>>a[i].data;a[i].pos=i;if(i==0){val[l]=a[i];++l;}else{for(int j=l-1; j>=0; --j){if(a[i].data>val[j].data){a[val[j].pos].next=a[i].data;//cout<<a[val[j].pos].data<<"-jkj->"<<a[i].data<<endl;val[j]=a[i];}else{val[l++]=a[i];break;}}}}for(int i=0; i<l; ++i){// cout<<val[i].data<<endl;a[val[i].pos].next=-1;}for(int i=0; i<n; ++i)printf("%d-->%d\n",a[i].data,a[i].next);//[i].data<<"-->"<<a[i].next<<endl;}}return 0;
}
AC
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#define N 100001
using namespace std;struct node
{int num;int id;int next;
};
struct node a[N];
int main()
{int t;scanf("%d",&t);stack <struct node > p;for(int i=1; i<=t; i++){while(!p.empty()){p.pop();}int n;if(i>1)printf("\n");scanf("%d",&n);for(int j=1; j<=n; j++){scanf("%d",&a[j].num);a[j].id=j;a[j].next=-1;if(p.empty()){p.push(a[j]);}else{while(!p.empty()){struct node b;b=p.top();if(b.num<a[j].num){a[b.id].next=a[j].num;p.pop();}elsebreak;}p.push(a[j]);}}for(int j=1; j<=n; j++){printf("%d-->%d\n",a[j].num,a[j].next);}}return 0;
}