WA30pts求调
查看原帖
WA30pts求调
689810
2020luke楼主2024/1/10 13:27

rt

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n;
int a[N];
int l[N], r[N];
bool flag[N];
void del(int x) {
	r[l[x]] = r[x];
	l[r[x]] = l[x];
}
int main() {
	cin >> n;
	int cnt = 0;
	a[0] = -1;
	a[n + 1] = -1;
	int lst = 0;
	for(int i = 1; i <= n; i++) {
		cin >> a[i];
		if(a[i] != a[i - 1]) {
			r[lst] = i;
			l[i] = lst;
			lst = i;
			cnt++;
		}
	}
	r[lst] = n + 1;
	l[n + 1] = lst;
	while(a[r[0]] != -1) {
		for(int i = r[0]; i <= n; i = r[i]) {
			if(a[i] != a[l[i]]) {
				flag[i] = true;
				cout << i << " ";
			}
		}
		cout << "\n";
		for(int i = r[0]; i <= n;) {
			if(a[i + 1] != a[i]) {
				if(flag[i]) {
					del(i);
					i = r[i];
				}
				else {
					i = r[i];
				}
			}
			else {
				r[l[i]] = i + 1;
				l[r[i]] = i + 1;
				r[i + 1] = r[i];
				l[i + 1] = l[i];
				i = r[i];
			}
		}
	}
	return 0;
}
2024/1/10 13:27
加载中...