题解:本题要求|a-b|+|b-c|的值最大,子数组且长度最短,我们肯定是选最少的数获得最大的值(废话),我们去下绝对值发现,有两种情况下,b是可以消去的,(就是b比一个数大比另一个数小),这时候b的存在不影响我们的最终结果,考虑要选最小的数,那我们当然不选b啦。
AC代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn=2e5+5;
typedef long long ll;
int a[maxn],vis[maxn];
int main(){
int t;
cin>>t;
while(t--){
memset(vis,0,sizeof(vis));
int n;
cin>>n;
a[0]=0;
for(int i=1;i<=n;i++)cin>>a[i];
int ans=n;
for(int i=2;i<n;i++){
if((a[i]>=a[i-1]&&a[i]<=a[i+1])||(a[i]>=a[i+1]&&a[i]<=a[i-1])){
vis[i]++;
ans--;
}
}
cout<<ans<<endl;
for(int i=1;i<=n;i++){
if(!vis[i])
cout<<a[i]<<" ";
}
cout<<endl;
}
}