求助
查看原帖
求助
912999
13970067326a楼主2023/12/15 20:34
#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 求助

2023/12/15 20:34
加载中...