
思路,用数组来存储下标连续坐标的最大位置,存储的不是某个状态的和而是坐标
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<map>
#include<cmath>
typedef long long ll;
using namespace std;
ll mo[200009];
ll suf[200009],pre[200009];
ll maX(ll num1,ll num2,ll num3)
{
if(num1>=num2)
{
if(num1>=num3)
return num1;
else
return num3;
}
else{
if(num2>=num3)
return num2;
else
return num3;
}
}
int main()
{
int len;cin>>len;
for(int i=1;i<=len;i++)
scanf("%d",&mo[i]);
ll mark=1;
for(int i=1;i<=len;i++)
{
if(mo[i]>mo[i-1]) pre[i]=mark;
else pre[i]=mark=i;//如果没法递增,一切都只好重新开始了.jpg
}
mark=len;
for(int i=len;i>=1;i--)
{
if(mo[i]>mo[i+1]) suf[i]=mark;
else suf[i]=mark=i;
}
ll ans=0; for(int i=1;i<=len;i++){
ans=maX(ans,i-pre[i],suf[i]-i);
}
cout<<ans<<endl;
}
原创文章,作者:jamestackk,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/244734.html