#include <bits/stdc++.h>
using namespace std;
int n,m,a[1000010],b[1000010],c[1000010],l1 = 1,r1,l2 = 1,r2,ans,maxf[100010];
map<int,int> mp;
int main(){
cin >> n;
for (int i = 1; i <= n; i++){
cin >> a[i];
}
for (int i = 1; i <= n; i++){
if (a[i] > b[l1]){
r1++;
b[r1] = a[i];
while (a[i] > c[r2] && r2 >= l2) r2--;
r2++;
c[r2] = a[i];
maxf[i] = c[l2];
mp[a[i]]++;
}else{
while((mp[b[r1]] >= 2 || maxf[r1] != b[r1]) && r1 > l1){
mp[b[r1]]--;
r1--;
}
ans = max(ans,r1-l1+1);
l2 = 1;
r2 = 1;
c[1] = a[i];
for (int j = l1; j <= r1; j++){
mp[b[j]]--;
}
l1 = i;
r1 = i;
b[l1] = a[i];
maxf[i] = a[i];
}
}
while((mp[b[r1]] >= 2 || maxf[r1] != b[r1]) && r1 > l1){
mp[b[r1]]--;
r1--;
}
ans = max(ans,r1-l1+1);
if (ans == 1) ans--;
cout << ans;
}
单调队列 70 求助