bzoj 2761: [JLOI2011]不重复数字 排序

来源:互联网 发布:文言文字典软件 编辑:程序博客网 时间:2024/05/30 02:53

题目

传送门

分析

先按数字排序,把重复的去掉后再按照原来的位置排序然后输出即可。

代码

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#define N 50005#define inf 0x3f3f3f3fusing namespace std;int n;struct data{int num,id;}a[N];bool cmp1(data a,data b){    return a.num<b.num||a.num==b.num&&a.id<b.id;}bool cmp2(data a,data b){    return a.id<b.id;}int main(){    int t;    scanf("%d",&t);    while (t--)    {        scanf("%d",&n);        for (int i=1;i<=n;i++)        {            scanf("%d",&a[i].num);            a[i].id=i;        }        sort(a+1,a+n+1,cmp1);        for (int i=n;i>=2;i--)            if (a[i].num==a[i-1].num) a[i].id=inf;        sort(a+1,a+n+1,cmp2);        for (int i=1;i<=n;i++)        {            if (a[i].id==inf) break;            printf("%d",a[i].num);            if (a[i+1].id!=inf&&i<n) printf(" ");        }        cout<<endl;    }    return 0;}
0 0