用双链表直接秒:
#include <bits/stdc++.h>
using namespace std;
int n, a[200005], b[200005], c[200005], l[200005], r[200005], bn, cn;
int main() {
cin >> n;
for(int i = 1; i <= n; i ++) {
cin >> a[i];
if(i == 1 || a[i] != a[i - 1]) b[++ bn] = i;
l[i] = i - 1, r[i] = i + 1;
}
l[n + 1] = n, r[0] = 1;
a[0] = a[n + 1] = -1;
while(r[0] != n + 1) {
cn = 0;
for(int i = 1; i <= bn; i ++) {
cout << b[i] << ' ';
int x = l[b[i]], y = r[b[i]];
r[x] = y, l[y] = x;
if(a[b[i]] == a[y] && a[b[i]] != a[x]) c[++ cn] = y;
}
cout << endl;
for(int i = 1; i <= cn; i ++) b[i] = c[i];
bn = cn;
}
return 0;
}
(求关)