枚举断点

牛牛的数列

https://ac.nowcoder.com/acm/problem/13142

lf[i]代表从i往左递增序列的最大长度
rg[i]代表从i往右递增序列的最大长度
然后枚举每一个断点

#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>
#include <algorithm>
#include <set>
#include <string>
#include <sstream>
#include <stack>
#include <algorithm>
#include <queue>
#include <numeric>
using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<int> vec;
    int lf[100005]{ 0 };
    int rg[100005]{ 0 };
    for (int i = 0; i < n; i++) {
        int tmp;
        cin >> tmp;
        vec.push_back(tmp);

        rg[i]=lf[i] = 1;
    }
    for (int i = 1; i < n; i++) {
        if (vec[i] > vec[i - 1]) {
            lf[i] = lf[i-1] + 1;
        }
    }
    for (int i = n - 2; i >= 0; i--) {
        if (vec[i] < vec[i + 1]) {
            rg[i] = rg[i+1] + 1;
        }
    }
    int ans=1;
    for (int i = 0; i < n; i++) {
        int k = 0;
        if (i == 0) {
            k = rg[i];
        }
        else if (i == n - 1) {
            k = lf[i];
        }
        else {
            if ( vec[i+1] - vec[i-1]>=2 ) {
                k = lf[i - 1] + rg[i+1]+1;
            }
        }
        ans = max(ans, k);
    }
    cout<<ans;
    return 0;
}
全部评论

相关推荐

10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
主页这么好的公司是谁在进啊:虽然很想感谢你的分享,但是此刻的嫉妒和酸气已经涌上心头,所以我撤销一下对你的感谢吧,希望你能原谅我
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务