CCF 202109-2 非零段划分

暴力70分能拿到,100分不能

知识点:

了解到差分的思想,现在认为如果用到了一个数组来记录区间变化量,则可称为差分。

unique函数:【整理】C++中的unique函数 - nimphy - 博客园 (cnblogs.com)

 

参考别人的文章后自己写,第一次没过。

原因是

for(int i = 1 ; i < n-1 ; i++){
        if(a[i-1]<a[i]&&a[i]>a[i+1]){
            cnt[a[i]]++;
        }
        else {
            cnt[a[i]]--;
        }
    }

else判断条件错误,应该是

for(int i = 1 ; i < n-1 ; i++){
        if(a[i-1]<a[i]&&a[i]>a[i+1]){ 
            cnt[a[i]]++;
        }
        else if(a[i-1]>a[i]&&a[i]<a[i+1]){
            cnt[a[i]]--;
        }
    }

什么是“山峰” “山谷”当时没搞清楚

AC代码:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int a[500005];
int cnt[10007];
int main(){
    int n;
    cin >> n;
    for(int i = 1 ; i <= n ; i++){
        cin >> a[i];
    }
    a[0] = a[n+1] = 0;
    n = unique(a,a+n+2)-a;
    for(int i = 1 ; i < n-1 ; i++){
        if(a[i-1]<a[i]&&a[i]>a[i+1]){ 
            cnt[a[i]]++;
        }
        else if(a[i-1]>a[i]&&a[i]<a[i+1]){
            cnt[a[i]]--;
        }
    }
    int sum = 0, ans = 0;
    for(int i = 10001; i>0 ;i--){
        sum += cnt[i];
         ans = max(ans,sum);
    }
    cout << ans << endl;
}

参考:

(14条消息) csp2021-09-2 非零段划分_隔壁李叟的博客-CSDN博客

posted @ 2022-07-11 10:21  夏莱发电厂的Sensei  阅读(201)  评论(0)    收藏  举报