求查错。。

P5462 X龙珠

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


| 下一页