大连大学校赛-Raksasa的轻功
思路,用数组来存储下标连续坐标的最大位置,存储的不是某个状态的和而是坐标
#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; }