思路:
容易得出最多不超过长度为二的下降子序列
所以序列可以表示为两个上升子序列
设dpi,0/1表示以i为开头的子序列,另外一个子序列的开头最大是多少。
然后我们就可以dp,从-a[i],a[i],dp[i][1],dp[i][0]转移。
然后根据dp贪心构造
codecodecode
#include<iostream>
#include<cstdio>
using namespace std;
const int MAXN = 1e6 + 10;
int t;
int dp[MAXN][2], a[MAXN];
int tmp[4][2];
int main() {
scanf("%d", &t);
while(t --) {
int n;
scanf("%d", &n);
for(int i