@[yangningyuan](/space/show?uid=27607) 链表的话,,,我和你的差不多
```
#include<iostream>
#include<algorithm>
using namespace std;
int n,a[100005],next[100005],pre[100005],b[100005],sum1,sum2,tail,head,vis[100005];
struct node
{
int num,id;
}c[100005];
bool cmp(node a,node b)
{
return a.num>b.num;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) pre[i]=i-1,next[i]=i+1;
sum1=n,tail=n,head=1;
for(int i=1;i<=n;i++) c[i].num=a[i],c[i].id=i;
sort(c+1,c+n+1,cmp);
while(sum1)
{
int p=c[head].id;head++;
while(vis[c[head].id]) head++;
if(p==tail) p=c[head].id,head++;
while(vis[c[head].id]) head++;
if(p==pre[tail]) tail=pre[p];
b[++sum2]=a[p];
b[++sum2]=a[next[p]];
vis[p]=vis[next[p]]=1;
sum1-=2;
pre[next[next[p]]]=pre[p];
next[pre[p]]=next[next[p]];
}
for(int i=1;i<=sum2;i++) cout<<b[i]<<" ";
return 0;
}
```
by 有朋自远方来 @ 2019-07-15 15:50:40
@[yangningyuan](/space/show?uid=27607) 你这个怎么保证字典序最大?
by x义x @ 2019-07-15 15:57:22
我好像明白了,不需要存原数据,直接枚就完了,此贴完结
by ynyxxx @ 2019-07-15 15:59:04
@[x义x](/space/show?uid=58567) 本来是直接枚n_1,但是写错了……
by ynyxxx @ 2019-07-15 15:59:53