HDU4521+线段树+dp
题意:在一个序列中找出最长的某个序列。找出的序列满足题中的条件。
关键:对于 第 i 个位置上的数,要知道与之相隔至少d的位置上的数的大小。可以利用线段树进行统计,查询。更新的时候利用dp的思想。
/*
统计某一段内有多少比aim小的数据
在更新的时候利用了dp的思想。
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
const int maxn = ;
struct node{
int sum,l,r;
}anode[ maxn<< ];
#define left( x ) (x<<1)
#define right( x ) ((x<<1)+1) int data[ maxn ],dp[ maxn ]; void build( int l,int r,int n ){
anode[ n ].l = l;
anode[ n ].r = r;
anode[ n ].sum = ;
if( l==r ) return ;
int mid = (l+r)/;
build( l,mid,left( n ) );
build( mid+,r,right( n ) );
return ;
} void update( int aim_pos,int aim_value,int l,int r,int n ){
if( l==r ){
anode[ n ].sum = aim_value;
return ;
}
int mid = (l+r)/;
if( aim_pos<=mid ) update( aim_pos,aim_value,l,mid,left( n ) );
else update( aim_pos,aim_value,mid+,r,right( n ) );
anode[ n ].sum = max( anode[ left( n ) ].sum,anode[ right( n ) ].sum );
} int query( int a,int b,int l,int r,int n ){
if( a==l&&b==r ){
return anode[ n ].sum;
}
int mid = (l+r)/;
if( b<=mid ) return query( a,b,l,mid,left( n ) );
else if( mid<a ) return query( a,b,mid+,r,right( n ) );
else return max( query( a,mid,l,mid,left( n ) ),query( mid+,b,mid+,r,right( n ) ) );
} int main(){
int n ,d;
while( scanf("%d%d",&n,&d)== ){
memset( dp,,sizeof( dp ));
int maxNum = ;
for( int i=;i<=n;i++ ){
scanf("%d",&data[i]);
maxNum = max( maxNum,data[ i ] );
}
build( ,maxNum, );
int ans = ;
for( int i=;i<=n;i++ ){
if( i-d> )
update( data[ i--d ],dp[ i--d ],,maxNum, );
if( data[ i ]> ) dp[ i ] = query( ,data[ i ]-,,maxNum, )+;
else dp[ i ] = ;
ans = max( ans,dp[ i ]) ;
}
printf("%d\n",ans);
}
return ;
}
HDU4521+线段树+dp的更多相关文章
- Tsinsen A1219. 采矿(陈许旻) (树链剖分,线段树 + DP)
[题目链接] http://www.tsinsen.com/A1219 [题意] 给定一棵树,a[u][i]代表u结点分配i人的收益,可以随时改变a[u],查询(u,v)代表在u子树的所有节点,在u- ...
- HDU 3016 Man Down (线段树+dp)
HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- hdu4521(线段树+dp)
传送门:小明系列问题——小明序列 题意:有n个数,求间距大于d的最长上升序列. 分析:dp[i]表示在i点以a[i]结束距离大于d的最长上升序列,然后每更新到第i点时,取i-d之前小于a[i]的数为结 ...
- lightoj1085 线段树+dp
//Accepted 7552 KB 844 ms //dp[i]=sum(dp[j])+1 j<i && a[j]<a[i] //可以用线段树求所用小于a[i]的dp[j ...
- [CF 474E] Pillars (线段树+dp)
题目链接:http://codeforces.com/contest/474/problem/F 意思是给你两个数n和d,下面给你n座山的高度. 一个人任意选择一座山作为起始点,向右跳,但是只能跳到高 ...
- HDU-3872 Dragon Ball 线段树+DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3872 题意:有n个龙珠按顺序放在一列,每个龙珠有一个type和一个权值,要求你把这n个龙珠分成k个段, ...
- Codeforces Round #343 (Div. 2) D - Babaei and Birthday Cake 线段树+DP
题意:做蛋糕,给出N个半径,和高的圆柱,要求后面的体积比前面大的可以堆在前一个的上面,求最大的体积和. 思路:首先离散化蛋糕体积,以蛋糕数量建树建树,每个节点维护最大值,也就是假如节点i放在最上层情况 ...
- Special Subsequence(离散化线段树+dp)
Special Subsequence Time Limit: 5 Seconds Memory Limit: 32768 KB There a sequence S with n inte ...
- hdu 4117 GRE Words (ac自动机 线段树 dp)
参考:http://blog.csdn.net/no__stop/article/details/12287843 此题利用了ac自动机fail树的性质,fail指针建立为树,表示父节点是孩子节点的后 ...
随机推荐
- orcale授权
grant connect,resource,dba to 表名;--用户授权 CONNECT角色: --是授予最终用户的典型权利,最基本的 CREATE SESSION --建立会话 RESOURC ...
- 转:『代码』JS封装 Ajax级联下拉列表
在博客园看到一篇不错的AJAX级联下拉列表,觉得不错,特地拿下来 :转载来自:『大雪无痕』 ,原文地址 //当一个 下拉列表 改变时,触发所有联动:(警告:各下拉列表之间 请不要出现 循环依赖) // ...
- Java中内存空间的分配及回收
Java中内存分为: 栈:存放简单数据类型变量(值和变量名都存在栈中),存放引用数据类型的变量名以及它所指向的实例的首地址. 堆:存放引用数据类型的实例. Java的垃圾回收: 由一个后台线程GC(G ...
- Android屏幕保持唤醒状态
我们程序偶尔会有需要屏幕一直或较长时间的保持唤醒状态,而用户的睡眠时间又设置的比较短.这时可能会对程序以及用户的使用造成一定的影响.在Android中有两种方法,可以让我们在我们需要保持唤醒的页面长时 ...
- 使用netbeans 搭建 JSF+SPRING 框架
spring版本使用4,jsf版本2.2 jsf的配置文件faces-config.xml <?xml version='1.0' encoding='UTF-8'?> <faces ...
- MVC (M-V-C启动程序调用关系)
在网上有很多mvc程序启动,调用之间的关系与顺序.而且还有很多很不错的网站.推荐一个 http://www.cnblogs.com/QLeelulu/archive/2008/09/30/1 ...
- SQL日期操作及只获取日期的方法
datepart()函数的使用 * datepart()函数可以方便的取到时期中的各个部分*如日期:2006-07--02 18:15:36.513* ...
- C++中map用法
/************************************************************************** Map的特点: 1.存储Key-value对* ...
- “Assign Random Colors” is not working in 3ds Max 2015
Go to Customize -> Preferences…-> General (tab) Uncheck “Default to By Layer for New Nodes”
- 使用python抓取有路网图书信息(原创)
以前挺喜欢去有路网买二手书的,但是有路网有个缺陷,就是放在图书列表中的书很多都没货了,尤其是一些热门的方向,比如android,在列表中的书大多都没有货了,你必须一个一个点进入查看详细信息才能得知图书 ...