正确代码:
#include<iostream>
#include<algorithm>
using namespace std;
#define N 500010
#define M 10010
int a[N];
int cnt[M];//高度为i的山峰的贡献
int n;
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
n = unique(a + 1, a + 1 + n) - a - 1;//去除相邻重复元素并返回个数
a[0] = a[n + 1] = 0;//为了方便处理,置第一个和最后一个为0
int x, y, z;
for (int i = 1; i <= n; i++)
{
x = a[i - 1], y = a[i], z = a[i + 1];
if (x<y && y>z) cnt[y]++;
else if (x > y && y < z) cnt[y]--;
}
int sum = 0, res = 0;
for (int i = M-1; i; i--)
{
sum += cnt[i];
res = max(sum, res);
}
cout << res;
return 0;
}
unique()函数,在头文件<algorithm>中,作用是去除相邻重复元素,时间复杂度为O(n),函数原型为:iterator unique(iterator it_1,iterator it_2);这两个参数表示对容器中[it_1,it_2)范围的元素进行去重(注:区间是前闭后开,即不包含it_2所指的元素),返回值是一个迭代器,它指向的是去重后容器中不重复序列的最后一个元素的下一个元素。