手写链表(用结构体实现)套STL queue,屎样的代码样例都过不了。
#include<bits/stdc++.h>
using namespace std;
int cnt,n,m;
struct node{
queue<int>q;
int nxt,pre;
bool z;
}a[200005];
void del(int x)
{
a[a[x].pre].nxt=a[x].nxt;
a[a[x].nxt].pre=a[x].pre;
}
void hb(int bx,int by)
{
node x=a[bx],y=a[by];
while(!y.q.empty())
{
x.q.push(y.q.front());
y.q.pop();
}
del(by);cnt++;
}
int to_int(char c){return c-'0';}
char to_char(int i){return i+'0';}
signed main()
{
cin.tie(0)->sync_with_stdio(0);
cin>>n;
int f2=1145;
for(int i=1;i<=n;i++)
{
int f;cin>>f;
if(f!=f2)m++;
a[m].q.push(i);
a[m].z=f;
a[m].nxt=m+1;
a[m].pre=m-1;
f2=f;
}
a[0].nxt=1;a[m+1].nxt=0;
queue<int>q;
while(cnt<m)
{
for(int i=a[0].nxt;i;i=a[i].nxt)
{
cout<<a[i].q.front()<<" ";
a[i].q.pop();
q.push(i);
}
while(!q.empty())
{
int i=q.front();q.pop();
if(a[i].q.empty())
{
if(a[i].nxt!=0&&a[i].pre!=0&&a[a[i].nxt].z==a[a[i].pre].z)
hb(a[i].pre,a[i].nxt);
del(i);cnt++;
}
}
cout<<endl;
}
return 0;
}