大连大学校赛-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;
}

 

posted on 2022-04-16 22:45  zesure  阅读(33)  评论(0编辑  收藏  举报

导航