针对arr的unique int n=unique(arr,arr+arr.size())-arr;
这里的n即去重的尾地址。 i<n
从全部淹没到全部露出,出现山峰,说明有新岛++,出现山谷,新岛–,记住,这样写最后一定是从100000向1遍历,如果从1到10000遍历,那么++与–的位置要调换。或者用绝对值。
ac:
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
int num;
int main(){
cin>>num;
int v[num+2];
memset(v,0,sizeof(v));
vector<int> cnt(10005);
for(int i=1;i<=num;i++){
cin>>v[i];
}
v[0]=0;
v[num+1]=0;
int n=unique(v,v+num+2)-v;
for(int i=1;i<n-1;i++){
if(v[i]>v[i-1] && v[i]>v[i+1])
cnt[v[i]]++;
if(v[i]<v[i-1] && v[i]<v[i+1])
cnt[v[i]]--;
}
int ans=0,res=0;
for(int i=10004;i>=0;i--){
res+=cnt[i];
ans=max(ans,res);
}
cout<<ans;
return 0;
}