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; }
参考:

浙公网安备 33010602011771号