思路
- 做法:其实这题目只要找到几个斜率变化的节点即可,起点和终点一定存下来。
代码
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int N=1e5+5;
int a[N];
int main(){
int T;
cin >> T;
while(T--){
int n;
cin >> n;
vector<int> v;
int flag=0;
for(int i=0;i<n;i++){
cin >> a[i];
if(!i){
v.push_back(a[i]);
}
if(i){
if(a[i]>a[i-1]){
if(flag==-1)v.push_back(a[i-1]);
flag=1;
}
if(a[i]<a[i-1]){
if(flag==1)v.push_back(a[i-1]);
flag=-1;
}
}
if(i==n-1){
v.push_back(a[i]);
}
}
cout << v.size()<< "\n";
for(int i=0;i<v.size();i++){
cout << v[i] << " ";
}
cout << "\n";
}
}