RT。布吉岛为什么错了……(在CF上测的)
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100001
int n, ans;
int arr[MAXN], id[MAXN], Next[MAXN];
queue<pair<int, int>> a, b;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i=1; i<=n; i++){
cin >> arr[i];
Next[i] = n+1;
}
for (int i=n; i>=1; i--){
Next[i] = id[arr[i]];
id[arr[i]] = i;
}
a.push(make_pair(0, n+1));
b.push(make_pair(0, n+1));
for (int i=1; i<=n; i++){
if (arr[i] == a.back().first){
if (arr[i] != b.back().first) ans++;
b.push(make_pair(arr[i], Next[i]));
}else if (arr[i] == b.back().first){
ans++;
a.push(make_pair(arr[i], Next[i]));
}else{
ans++;
if(a.back().second < b.back().second) a.push(make_pair(arr[i], Next[i]));
else b.push(make_pair(arr[i], Next[i]));
}
}
cout << ans;
return 0;
}