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/.