求助

P5462 X龙珠

@[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


|