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指针建立为树,表示父节点是孩子节点的后 ...
 
随机推荐
- iis7下.Net框架版本设置
			
转载:http://blog.163.com/fan_yishan/blog/static/47692213201391651229542/ Win7下IIS网站的.Net框架版本设置 步骤/方法 1 ...
 - java--简单排序算法
			
1.冒泡排序 排序原理: 过程简单,首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录与第三个记录得关键字.以此类推,直至第n-1个记录和第n个记录的 ...
 - 【转】Error: no `server' JVM at `C:\Program Files\Java\jre6\bin\server\jvm.dll'.解决办法
			
出现问题: 用java -jar XXX.jar -server -Xms900m -Xmx900m 或者 java -server -version 提示错误 Error: no `server' ...
 - linux配置学习笔记(一):如何提高ssh连接的速度
			
服务器端sshd配置文件 /etc/ssh/sshd_config 看是否有如下的两条配置条目 GSSAPIAuthentication no UseDNS no 如果前面带#,请把#删掉,或者新添加 ...
 - CentOS配置java运行环境
			
CentOS_配置_docker CentOS_6.5 1.CentOS_6.5在安装docker-io之前需要首先卸载docker包(没下载过可以省略) $ sudo yum -y remove d ...
 - 九度OJ 1387 斐波那契数列
			
题目地址:http://ac.jobdu.com/problem.php?pid=1387 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.斐波那契数列的定义 ...
 - Apache(一)
			
以下介绍是基于centos,Apache/2.2.15,进行解释 (资料来自www.netcraft.com) Apache 模块化的软件 Apache=core+module(内核+模块) core ...
 - 支持HTML5新标签
			
IE8/IE7/IE6支持通过document.createElement方法产生的标签, 可以利用这一特性让这些浏览器支持HTML5新标签, ...
 - unix 常用命令
			
(一)基本命令 命令格式: 命令 参数 1.ls 显示文件名,等同于dos下dir命令 命令格式:ls [option] file option: -l 显示详细列表 域1 :文件类型和文件权限 域2 ...
 - C# WinForm实现控件拖动实例介绍
			
主要是设计控件的MouseDown.MouseLeave.MouseMove事件.一步步来吧:1.定义一个枚举类型,描述光标状态 private enum EnumMousePointPosition ...