UVA - 10534 Wavio Sequence
来源:互联网 发布:博物馆软件 编辑:程序博客网 时间:2024/06/11 19:44
n*logn 的最长上升子序列的实现
二分查找,维护一个升序数组来实现最长上升子序列。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>using namespace std;const int maxn=10005;int arr[maxn],f1[maxn],f2[maxn],OrdArr[maxn];int Binary_S(int t,int key){int l=1,r=t,mid=(l+r)>>1;while(l<r){if(OrdArr[mid]<key)l=mid+1;else r=mid;mid=(l+r)>>1;}return l;}int main(){int n;while(scanf("%d",&n)==1){for(int i=1;i<=n;i++)scanf("%d",arr+i);memset(f1,0,sizeof(f1));memset(f2,0,sizeof(f2));int len=1;OrdArr[1]=arr[1];f1[1]=1;for(int i=2;i<=n;i++){if(arr[i]>OrdArr[len]){++len;OrdArr[len]=arr[i];f1[i]=len;}else {int tmp=Binary_S(len,arr[i]);f1[i]=tmp;OrdArr[tmp]=arr[i];}}len=1;OrdArr[1]=arr[n];f2[n]=1;for(int i=n-1;i>0;i--){if(arr[i]>OrdArr[len]){++len;OrdArr[len]=arr[i];f2[i]=len;}else {int tmp=Binary_S(len,arr[i]);f2[i]=tmp;OrdArr[tmp]=arr[i];}}int ans=0;for(int i=1;i<=n;i++){ int tmp=min(f1[i],f2[i]);if(tmp>ans)ans=tmp;}printf("%d\n",2*ans-1);}return 0;}
0 0
- uva 10534 Wavio Sequence
- UVA 10534 Wavio Sequence
- UVA 10534 - Wavio Sequence
- uva 10534 Wavio Sequence
- Uva-10534-Wavio Sequence
- UVa 10534 - Wavio Sequence
- uva 10534 - Wavio Sequence
- UVa 10534 - Wavio Sequence
- UVA-10534-Wavio Sequence
- UVA 10534 Wavio Sequence
- UVA 10534 Wavio Sequence
- UVA 10534 Wavio Sequence
- UVA 10534 Wavio Sequence
- UVa:10534 Wavio Sequence
- UVA - 10534 Wavio Sequence
- UVa 10534 Wavio Sequence
- uva 10534 Wavio Sequence
- uva 10534 Wavio Sequence
- Android Open GL使用int类型数据定义坐标值
- hdu2030
- Openlayers入门
- 2014湖南省大学生程序设计竞赛总结
- 《数据结构》第二章 线性表 同学提问答案收集 分配
- UVA - 10534 Wavio Sequence
- poj3278--Catch That Cow
- Xcode的快捷键
- 字符串的一些知识
- 想让程序开机启动有管理员权限,使用 Windows 服务吧!
- QPainter
- POJ 1458 Common Subsequence
- 深度优先搜寻(DFS) C语言实现
- 软件模型检测简介