uva10534
来源:互联网 发布:软件股票最新上市公司 编辑:程序博客网 时间:2024/05/24 22:44
make a 2*l sequence which is + in 0-l-1 and - in l-2*l-1, and make sure the l is max
main algorithm
keep a up-going sequence from 0 - n-1 and n-1 - 0, so the d1[i] is the length of up-going sequence from 0 - i-1 and d2[i] is the down-going sequence of i-n-1
code:
#include<cstdio>#include<cstdlib>#include<algorithm>#include<iostream>#include<climits>using namespace std;const int N = 10005;int stack[N], d1[N], d2[N];int a[N];int search(int l, int r, int x) {while(l<=r) {int mid = (l+r)/2;if(x > stack[mid])l = mid+1;else r = mid-1;}return l;}int n;int main() {while(scanf("%d", &n) == 1) {for(int i=1; i<=n; i++) scanf("%d", &a[i]);int top = 0;stack[top] = INT_MIN;for(int i=1; i<=n; i++) {if(a[i] > stack[top]) stack[++top] = a[i];else {int tmp = search(1, top, a[i]);stack[tmp] = a[i];}d1[i] = top;}top = 0, stack[0] = INT_MIN;for(int i=n; i>=1; i--) {if(a[i] > stack[top]) stack[++top] = a[i];else {int tmp = search(1, top, a[i]);stack[tmp] = a[i];}d2[i] = top;}int ans = 0;for(int i=1; i<=n; i++) {if(ans<min(d1[i], d2[i])) ans = min(d1[i], d2[i]);}printf("%d\n", 2*ans-1);}return 0;}
0 0
- UVA10534
- uva10534
- UVa10534
- uva10534 LISDP
- Wavio Sequence UVA10534
- UVA10534 wavio sequence
- UVA10534 Wavio Sequence
- uva10534---Wavio Sequence
- UVa10534 Wavio Sequence
- UVa10534 Wavio Sequence
- uva10534 hdu2198 双向LIS问题
- UVA10534 - Wavio Sequence - 动态规划
- UVA10534-Wavio Sequence(LIS)
- UVA10534-----Wavio Sequence-----动态规划之LIS
- uva10534(DP之LIS的应用 )
- UVA10534[Wavio Sequence] 动态规划 LIS
- uva10534 - Wavio Sequence(动归,最长上升子序列)
- uva10534 - Wavio Sequence O(nlgn)的最长上升子序列
- 误删ubuntu下/usr/bin
- const变量通过指针修改 详解
- python + fabric 实现批量部署
- 嵌入式linux交叉编译环境构建
- Activity常用方法
- uva10534
- 跟着廖雪峰的git教程学习(2)时光机穿梭(一)版本回退
- 模仿百度搜索界面
- 0CTF 2016 RSA?(未完成)
- 【算法------01】从某个数字列表中找出两个彼此最接近但不相等的数
- 二叉树的深度
- linux的自动任务创建
- *(p+i) ,C语言数组指针_C语言中文网
- POJ 3617 Best Cow Line - 贪心