题目大意:给出长度为n的序列,要求你删除掉一段的连续子序列,使得剩下的序列的递增子序列最长
解题思路:记录以下每个位置的值所能延伸的最左端和最右端,用一个数组记录长度为i的数的最小值,然后从左往右扫描,用二分搜索在数组中找到小于当前值的数的位置,用当前数的right + len - 1就是结果了,再维护一下最大值
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define maxn 200010
int num[maxn], l[maxn], r[maxn], Min[maxn];
int main() {
int test, n;
scanf("%d", &test);
while(test--) {