SHUoj415

来源:互联网 发布:云计算概念股 编辑:程序博客网 时间:2024/06/15 12:41
#include <bits/stdc++.h>using namespace std;const int N = 5e5 + 9;int a[N],b[N];int dpl[N],dpr[N],dp[N];#define inf 0x3f3f3f3fint main(){    int n;    std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);    while(cin >> n) {    for(int i = 0;i < n;i ++) {        cin >> a[i];        b[n - i - 1] = a[i];    }    fill(dp, dp + n, inf);    for(int i = 0;i < n;i ++) {        dpl[i] = lower_bound(dp, dp + n, a[i]) - dp ;        *lower_bound(dp, dp + n, a[i]) = a[i];        dpl[i] ++;    }    fill(dp, dp + n, inf);    for(int i = 0;i < n;i ++) {        dpr[i] = lower_bound(dp, dp + n, b[i]) - dp;        *lower_bound(dp, dp + n, b[i]) = b[i];        dpr[i] ++;    }    for(int i = 0;i < n / 2;i ++) {        swap(dpr[i], dpr[n - i - 1]);    }    int ans = -1;    for(int i = 0;i < n;i ++){        ans = max(ans, 2 * min(dpl[i], dpr[i]) - 1);    }    cout << ans << endl;    }    return 0;}

正向反向求单调增.,别忘了swap一下。题目网址http://acmoj.shu.edu.cn/problems/10/.