题目链接:
思路:
先将重复的删掉,然后与后面的比较,找到递减序列和递增序列,每个序列只加1次,也就是头的次数,最后再加上1,因为最后一个数是绝对要保留的。
错误:
没有想到可以先将重复的删掉:(
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5+10;
typedef long long ll;
int a[N];
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int q;
cin>>q;
int n;
while(q--){
int sum=0;
int cnt=0;
int c;
cin>>n;
for(int i=0;i<n;i++){
cin>>c;
if(i==0||c!=a[cnt-1])a[cnt++]=c;
}
if(cnt==1){
cout<<1<<endl;
continue;
}
//cout<<cnt<<endl;
int i=0;
while(i<cnt-1){
if(a[i]<a[i+1]&&i<cnt-1){
while(a[i]<a[i+1]&&i<cnt-1){
i++;
}
sum++;
}
if(a[i]>a[i+1]&&i<cnt-1){
while(a[i]>a[i+1]&&i<cnt-1){
i++;
}
sum++;
}
}
cout<<sum+1<<endl;
}
return 0;
}