胡泽宸
(胡泽宸)
1
题面:
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int a[100010];
int p[100010];
int q[100010];
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
//第一个<=
p[n]=n;
stack<int>s;
s.push(n);
for(int i=n-1;i>=1;i--){
while(s.size()&&a[s.top()]>a[i]){
s.pop();
}
if(s.size()){
p[i]=s.top()-1;
}else{
p[i]=n;
}
s.push(i);
}
//第一个>=
q[1]=1;
while(s.size())s.pop();
s.push(1);
for(int i=2;i<=n;i++){
while(s.size()&&a[s.top()]<a[i]){
s.pop();
}
if(s.size()){
q[i]=s.top()+1;
}else{
q[i]=1;
}
s.push(i);
}
//统计答案
int ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,p[i]-q[p[i]]+1);
}
cout<<ans;
return 0;
}
郑岱钦
(郑岱钦)
3
我在看了,我把两个栈压在一起维护,所以不太一样(but我有一个栈是<,一个是>=,这不一样)
郑岱钦
(郑岱钦)
6
这篇题解和你比较像,可以参考(点了之后下滑到第二篇题解)