


#include<iostream>
#include<stack>
using namespace std;
stack<int> st;
const int N = 1e6+5;
int dat[N];
int main()
{
int n;
int ans=0;
cin>>n;
for(int i=1;i<=n;++i)
{
cin>>dat[i];
if(st.empty())
{
st.push(i);
}
else
{
if(dat[i]>dat[st.top()])
{
st.push(i);
if(ans<i-st.top()) ans=i-st.top();
}
else if(dat[i]==dat[st.top()])
{
if(ans<i-st.top()) ans=i-st.top();
}
else
{
while(!st.empty()&&dat[i]<dat[st.top()])
{
st.pop();
}
if(st.empty())
{
st.push(i);
}
else if(dat[i]==dat[st.top()])
{
if(ans<i-st.top()) ans=i-st.top();
}
else
{
st.push(i);
if(ans<i-st.top()) ans=i-st.top();
}
}
}
}
cout<<ans<<endl;
return 0;
}
本文介绍了一种使用C++标准库stack实现寻找数组中连续子数组最大差值的算法,通过栈操作巧妙地处理数据比较,适用于竞赛编程和面试问题。
1778

被折叠的 条评论
为什么被折叠?



