hdu4512
来源:互联网 发布:斗鱼领鱼丸软件 编辑:程序博客网 时间:2024/04/29 22:13
题意为求给定序列中单调递增子序列,且相邻的两个小标之差大于d;
用线段树可解,(单点更新,查询线段) 线段树中的点是存以a【i】结尾的所要求的字串的最大值,动态规划也可解,但自己不明白如何变形,路过大神留下意见;
线段树代码:
#include<stdio.h>#include<algorithm>#include<string.h>const int maxn=100110;int tree[4*maxn];int maxnum(int a,int b) {return a>b?a:b;}void pushup(int rt){ tree[rt]=maxnum(tree[rt<<1],tree[rt<<1|1]);}void buildtree(int l,int r,int rt){ if(l==r) { tree[rt]=0;return;} int mid=(l+r)/2; buildtree(l,mid,rt<<1); buildtree(mid+1,r,rt<<1|1); pushup(rt);}void update(int rt,int pos,int val,int left,int right){ if(left==right) { tree[rt]=val; return ; } int mid=(left+right)/2; if(pos<=mid) update(rt<<1,pos,val,left,mid); else update(rt<<1|1,pos,val,mid+1,right); pushup(rt);}int query(int l,int r,int rt,int left,int right){ if(l>r) return 0; if(left==l&&right==r) return tree[rt]; int mid=(left+right)/2; if(l>mid) return query(l , r , rt<<1|1 ,mid+1,right ); else if(r<=mid) return query( l, r , rt<<1,left,mid ); else return maxnum(query(l, mid, rt<<1,left,mid),query( mid+1, r, rt<<1|1,mid+1,right));}struct ss{ int num; int pos;}a[maxn];bool cmp(ss t1,ss t2){ if(t1.num==t2.num) return t1.pos>t2.pos; else return t1.num<t2.num;}int main(){ //freopen("Input.txt","r",stdin); int i,n,d; while(~scanf("%d%d",&n,&d)) { buildtree(1,n,1); for(i=1;i<=n;i++) { scanf("%d",&a[i].num); a[i].pos=i; } std::sort(a+1,a+n+1,cmp); int ans=0; for(i=1;i<=n;i++) { int pos=a[i].pos; int tmp=query(1,pos-d-1,1,1,n); ans=maxnum(ans,tmp+1); update(1,pos,tmp+1,1,n); } printf("%d\n",ans); } return 0;}
- hdu4512
- hdu4512 LCIS
- hdu4512 LCIS
- hdu4512之完美队形
- hdu4512(最长上升公共子序列变形)
- hdu4512 吉哥系列故事——完美队形I
- HDU4512:吉哥系列故事--完美队形I
- hdu4512---吉哥系列故事——完美队形I
- HDU4512 吉哥系列故事——完美队形I
- 吉哥系列故事——完美队形I(hdu4512,公共子序列问题)
- HDU4512:吉哥系列故事——完美队形I(LICS)
- 吉哥系列故事——完美队形I(hdu4512(LCIS))
- HDU4512:吉哥系列故事——完美队形I(LICS)
- hdu4512吉哥系列故事——完美队形I【LICS】
- hdu4512吉哥系列故事——完美队形I(对称的lcs)
- HDU4512-吉哥系列故事——完美队形I(最长公共上升子序列)
- 2013腾讯编程马拉松初赛第2场(3月22)(HDU 4510 HDU4511 HDU4512 HDU4513 HDU4514)
- HDU4512 - 吉哥系列故事——完美队形I(LCIS最长公共上升子序列的巧妙应用)
- system与exec区别
- C++编码规范与指导
- Oracle||PL/SQL 设置主键自动递增
- 黑马程序员 类加载器 代理类
- enum枚举的研究
- hdu4512
- spoj 1811 LCS (后缀自动机 SAM)
- ARM模拟器——SkyEye的使用
- UML类图符号 各种关系说明以及举例
- 黑马程序员_IO流输入输出-装饰设计模式
- 分析ORA-12899, 迁移数据时遇到的多字节问题
- eclipse里两个项目之间相互引用
- ubuntu server 12.04中设置静态IP
- 月薪三万的中专生给大学生的十大忠告 说得太实在了