HDU 4604

来源:互联网 发布:红辣椒乐队 知乎 编辑:程序博客网 时间:2024/06/05 05:31
//============================================================================// Name        : I_love_cherry.cpp// Author      : mark// Version     :// Copyright   : Your copyright notice// Description : Hello World in C++, Ansi-style//============================================================================#include <iostream>#include <cstring>#include <string>#include <cmath>#include <cstdio>#include <vector>#include <map>#include <algorithm>using namespace std;const int maxn = 211111;int a[maxn];int f[maxn], g[maxn], same[maxn];void go(int dp[], int a[], int n, int same[]) {    vector<int> v;    for (int i = 0; i < n; ++i) {        int x = lower_bound(v.begin(), v.end(), a[i]) - v.begin();        int y = upper_bound(v.begin(), v.end(), a[i]) - v.begin();        if (y == (int) v.size()) {            v.push_back(a[i]);            dp[i] = v.size();        } else {            v[y] = a[i];            dp[i] = y + 1;        }        same[i] = y - x + 1;    }}int main() {    int n, i;    int T;    scanf("%d", &T);    while (T--) {        scanf("%d", &n);        for (i = 0; i < n; ++i)            scanf("%d", a + i);        reverse(a, a + n);        go(f, a, n, same);        for (i = 0; i < n; ++i)            a[i] *= -1;        go(g, a, n, same);        int ans = 0;        for (i = 0; i < n; ++i) {            ans = max(ans, f[i] + g[i] - same[i]);        }        printf("%d\n", ans);    }    return 0;}