@[Hiraeth](/space/show?uid=99460) %%%大佬
by Plus_Ultra @ 2019-07-18 21:42:57
@[Hiraeth](/space/show?uid=99460) 使用的队尾要维护吧,设当前取N-1,那么队尾就变成了N-2
by Plus_Ultra @ 2019-07-18 21:44:18
@[Hiraeth](/space/show?uid=99460) 代码没细看,但是用您代码测了组数据,发现链表的地方有些问题
数据如下:
```
8
1 9 2 6 3 8 4 7
```
您的输出
```
9 2 8 4 6 3 1 7
```
$3$后面应该跟$7$,不可能有$1$,盲猜某个地方$next$更新搞错了
by 无意识躺枪人 @ 2019-07-18 21:44:43
```
#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(sum2<n)
{
while(vis[c[head].id]) head++;
int p=c[head].id;head++;
while(vis[c[head].id]) head++;
if(p==tail) p=c[head].id,head++;
if(p==pre[tail]) tail=pre[p];
b[++sum2]=a[p];vis[p]=vis[next[p]]=1;
b[++sum2]=a[next[p]];
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 Plus_Ultra @ 2019-07-18 21:46:44
@[Hiraeth](/space/show?uid=99460) 照您的方法应该是要维护队尾的(口胡)
by Plus_Ultra @ 2019-07-18 21:48:40
@[Plus_Ultra](/space/show?uid=126136) 我判断的是编号啊
by Hiraeth @ 2019-07-18 21:54:22
@[scp_05_tqr](/space/show?uid=117842) 您那组样应该输出什么?
by Hiraeth @ 2019-07-18 21:55:54
@[Hiraeth](/space/show?uid=99460) 蒟蒻瑟瑟发抖
by Plus_Ultra @ 2019-07-18 21:56:30
@[Hiraeth](/space/show?uid=99460) 92846713
by 无意识躺枪人 @ 2019-07-18 22:04:43
不是,92846317
by 无意识躺枪人 @ 2019-07-18 22:05:04