思路:按数字排序,unique 去重,按 id 顺序排回去。
#include<bits/stdc++.h>
using namespace std;
struct node{
int id,s;
bool operator==(const node &p){
return s==p.s;
}
}a[50005];
int T,n;
bool cmp1(node u,node v){
if(u.s!=v.s)return u.s<v.s;
else return u.id<v.id;
}
bool cmp2(node u,node v){
return u.id<v.id;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i].s);
a[i].id=i;
}
sort(a+1,a+n+1,cmp1);
// for(int i=1;i<=n;i++)printf("%d ",a[i].s);
// putchar('\n');
n=unique(a+1,a+n+1)-a;
// for(int i=1;i<=n;i++)printf("%d ",a[i].s);
// putchar('\n');
sort(a+1,a+1+n,cmp2);
for(int i=1;i<=n;i++)printf("%d ",a[i].s);
putchar('\n');
}
return 0;
}