UVA
来源:互联网 发布:欧德堡牛奶怎么样 知乎 编辑:程序博客网 时间:2024/05/01 22:25
乍一看不好下手
稍微一想就能想到 从左右两边分别求 LIS,可能数据量比较大,这里的用的
O(n*log n)的做法
还有题目已经要求了 上升下降的长度相等
所以就有 solve()函数中最后枚举每个点的时候,取最小的那个
代码如下:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<set>#include<stack>#include<queue>#include<algorithm>// cout << " === " << endl;using namespace std;typedef long long ll;const int maxn = 100000 + 7, INF = 0x3f3f3f3f, mod = 1e9+7;int T, n, p, q, ans;int a[maxn], b[maxn], c[maxn], d[maxn];void solve() { memset(d, INF, sizeof d); for(int i = 0; i < n; ++i) { *lower_bound(d, d+n+1, a[i]) = a[i]; b[i] = lower_bound(d, d+n+1, INF) - d; } memset(d, INF, sizeof d); for(int i = n-1; i >= 0; --i) { *lower_bound(d, d+n+1, a[i]) = a[i]; c[i] = lower_bound(d, d+n+1, INF) - d; } int ans = 0; for(int i = 0; i < n; ++i) { ans = max(ans, min(b[i], c[i])); } printf("%d\n", 2*ans - 1);}int main() { while(scanf("%d", &n) != EOF && n) { for(int i = 0; i < n; ++i) scanf("%d", &a[i]); solve(); } return 0;}
阅读全文
1 0
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- FreeCodeCamp备查簿(2:#31-#60)
- C++ ----调用exe的函数
- 【ML--09】决策树算法Decision Tree
- linux 有关防火墙查看
- LinkedIn开源Dr. Elephant:Hadoop和Spark性能监控工具
- UVA
- FFT学习资料
- iOS开发中使用SCRecorder进行视频裁剪遇到的问题
- Linux之正则表达式grep
- 二维树状数组
- 开始使用hibernate
- 第四课记录 离线计算与实时计算
- MongoDB存储引擎选择
- matlab中结构体使用方法——littlestonelj