推荐一个简短代码
查看原帖
推荐一个简短代码
1377891
lly66666楼主2024/12/4 20:47

用双链表直接秒:

#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;
}

(求关)

2024/12/4 20:47
加载中...