uva 10534 Wavio Sequence LIS 栈实现nlogn
2013-04-07 20:14
525 查看
#include<stdio.h> #include<string.h> #define maxn 10010 int st[maxn],z[maxn],f[maxn],a[maxn],n,top; int min(int a,int b) { return a>b?b:a; } int max(int a,int b) { return a>b?a:b; } int main() { int i,j,k,l; while(~scanf("%d",&n)) { memset(st,0,sizeof(st)); memset(f,0,sizeof(f)); memset(z,0,sizeof(z)); for(i=0;i<n;i++) { scanf("%d",&a[i]); } top=1; st[1]=a[0]; z[0]=1; for(i=1;i<n;i++) { if(a[i]>st[top]) { top++; st[top]=a[i]; z[i]=top; } else { int l,r,m; l=1;r=top; while(l<=r) { m=(l+r)>>1; //if(st[m]==a[i]) //break; if(st[m]<a[i]) { l=m+1; } else r=m-1; } z[i]=l; st[l]=a[i]; } } memset(st,0,sizeof(st)); top=1; f[n-1]=1; st[top]=a[n-1]; for(i=n-2;i>=0;i--) { if(a[i]>st[top]) { top++; st[top]=a[i]; f[i]=top; } else { int l,r,m; l=1;r=top; while(l<=r) { m=(l+r)>>1; if(st[m]<a[i]) { l=m+1; } else r=m-1; } f[i]=l; st[l]=a[i]; printf("l%d r%d m%d\n",l,r,m); } } int end=-1; for(i=0;i<n;i++) { int t=min(z[i],f[i]); end=max(t,end); } printf("%d\n",end*2-1); } return 0; }
相关文章推荐
- UVA 10534 Wavio Sequence LIS(nlogn实现)
- uva 10534 Wavio Sequence nlogn方法
- uva 10534 Wavio Sequence LIS
- UVa 10534 - Wavio Sequence DP+最长上升子序列(严格上升)+二分查找(nlogn)
- uva 10534 Wavio Sequence LIS
- UVA 10534 - Wavio Sequence LIS
- UVA 10534 - Wavio Sequence LIS
- UVa 10534 - Wavio Sequence LIS
- UVa 10534 - Wavio Sequence LIS
- UVA 10534 Wavio Sequence——LIS
- UVa 10534 DP LIS Wavio Sequence
- UVA10534:Wavio Sequence(最长递增和递减序列 n*logn)(LIS)好题
- uva 10534 Wavio Sequence XX序列(第一个词不认识)
- UVA 10534 Wavio Sequence DP(LIS+二分)
- UVa 10534 - Wavio Sequence
- Wavio Sequence UVA - 10534
- uva10534 - Wavio Sequence O(nlgn)的最长上升子序列
- uva 10534 Wavio Sequence(LIS)
- O(nlogn)实现LCS与LIS
- uva 10635 Prince and Princess(LCS成问题LIS问题O(nlogn))