HDU-4521 小明系列问题――小明序列(线段树)
题目大意:求LIS,但是要求LIS中相邻的两个元素之间的距离要大于d。
题目分析:线段树。节点(l,r)保存信息为LIS的最后一个元素落在[l,r]之间的最大长度。从第d+2个元素开始查询更新操作,但要在更新第i-d+1个元素信息之后。
代码如下:
# include<iostream>
# include<cstdio>
# include<queue>
# include<vector>
# include<list>
# include<cstring>
# include<algorithm>
using namespace std; const int N=100000; int dp[N+5];
int val[N+5];
int tr[N*4+5]; void build(int rt,int l,int r)
{
tr[rt]=0;
if(l!=r){
int mid=l+(r-l)/2;
build(rt<<1,l,mid);
build(rt<<1|1,mid+1,r);
}
} void update(int rt,int l,int r,int p,int v)
{
if(l==r)
tr[rt]=max(tr[rt],v);
else{
int mid=l+(r-l)/2;
if(p<=mid) update(rt<<1,l,mid,p,v);
else update(rt<<1|1,mid+1,r,p,v);
tr[rt]=max(tr[rt<<1],tr[rt<<1|1]);
}
} int query(int rt,int l,int r,int L,int R)
{
if(L<=l&&r<=R)
return tr[rt];
int mid=l+(r-l)/2;
if(R<=mid) return query(rt<<1,l,mid,L,R);
if(L>mid) return query(rt<<1|1,mid+1,r,L,R);
return max(query(rt<<1,l,mid,l,mid),query(rt<<1|1,mid+1,r,mid+1,R));
} int main()
{
int n,d;
while(~scanf("%d%d",&n,&d))
{
int ans=1;
build(1,0,N);
for(int i=0;i<n;++i){
scanf("%d",val+i);
if(i>=d+1)
update(1,0,N,val[i-d-1],dp[i-d-1]);
if(val[i]>0)
dp[i]=query(1,0,N,0,val[i]-1)+1;
else dp[i]=1;
ans=max(ans,dp[i]); }
printf("%d\n",ans);
}
return 0;
}
HDU-4521 小明系列问题――小明序列(线段树)的更多相关文章
- hdu 4521 小明系列问题——小明序列 线段树+二分
小明系列问题——小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Pro ...
- hdu 4521 小明系列问题——小明序列(线段树+DP或扩展成经典的LIS)
小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- 小明系列问题――小明序列(LIS)
小明系列问题――小明序列 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- hdu----(4521)小明系列问题——小明序列
小明系列问题——小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- 小明系列问题——小明序列(Lis 相距大于d的单调上升子序列)
小明系列问题——小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- 2018.07.08 hdu4521 小明系列问题——小明序列(线段树+简单dp)
小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Proble ...
- Snacks HDU 5692 dfs序列+线段树
Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...
- HDU 4521 小明系列问题——小明序列 (线段树 单点更新)
题目连接 Problem Description 大家都知道小明最喜欢研究跟序列有关的问题了,可是也就因为这样,小明几乎已经玩遍各种序列问题了.可怜的小明苦苦地在各大网站上寻找着新的序列问题,可是找来 ...
- hdu 4521 小明系列问题——小明序列(线段树 or DP)
题目链接:hdu 4521 本是 dp 的变形,却能用线段树,感觉好强大. 由于 n 有 10^5,用普通的 dp,算法时间复杂度为 O(n2),肯定会超时.所以用线段树进行优化.线段树维护的是区间内 ...
- HDU 4521 小明系列问题——小明序列 (线段树维护DP)
题目地址:HDU 4521 基本思路是DP.找前面数的最大值时能够用线段树来维护节省时间. 因为间隔要大于d. 所以能够用一个队列来延迟更新,来保证每次询问到的都是d个之前的. 代码例如以下: #in ...
随机推荐
- 从协议VersionedProtocol开始1
Phase 0: Make a plan You must first decide what steps you're going to have in your process. It sound ...
- 开发基于Handoff的App(Swift)
iOS8推出一个新特性,叫做Handoff.Handoff中文含义为换手(把接力棒传给下一个人),可以在一台Mac和iOS设备上开始工作,中途将工作交换到另一个Mac或iOS设备中进行 ...
- 在Android Studio中使用BaiduMap SDK实时获取当地位置信息
配置BaiduMap 环境 1.在百度API中新建自己的一个APP包名和APP名需要注意和自己Android Studio 中的包名和APP名保持一致: 2.百度地图中还需要填写一个SHA1 数字签名 ...
- SharePoint 2013 开发——发布SharePoint应用程序
博客地址:http://blog.csdn.net/FoxDave 前几篇我们介绍了开发.部署和调试SharePoint应用程序的基础,本篇介绍更实用的操作,当我们开发一个SharePoint应用 ...
- iOS 版本号Version和Build的区别
一个version,一个build,都是设置版本的地方,有什么区别呢? 在ios中(Android等工程中也一样),有两种version,一种是 CFBundleVersion ("Bund ...
- UIkit框架之UItextfield
1.继承链:UIcontrol:UIview:UIresponder:NSObject 2.成为第一响应者:[text becomeFirstResponder]; //让该文本成为第一响应者 3. ...
- 【LEETCODE OJ】Candy
Problem link: http://oj.leetcode.com/problems/candy/ Suppose we are given an array R[1..N] that are ...
- Android沉浸式(侵入式)标题栏(状态栏)Status(二)
Android沉浸式(侵入式)标题栏(状态栏)Status(二) 附录1以xml写style实现了Android沉浸式(侵入式)状态栏(标题栏),同样以上层Java代码实现.在附录文章1的基础上 ...
- asp登陆例子,asp,mssql,登陆
login.aspx文件 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="log ...
- BZOJ3028 食物 (生成函数)
首先 1+x+x^2+x^3+...+x^∞=1/(1-x) 对于题目中的几种食物写出生成函数 (对于a*x^b , a表示方案数 x表示食物,b表示该种食物的个数) f(1)=1+x^2+x^4+. ...