二维LIS(CDQ分治)
题目描述
给定一个长度为N的序列S,S的每个元素pi是一个二元组(xi,yi),定义pi<pj当且仅当xi<xj并且yi<yj,求S的最长上升子序列长度
输入格式
第一行一个N,表示一共有N个元素
接下来有N行,每行包含两个正整数xi,yi
输出格式
输出一行一个整数,代表序列S的最长上升子序列的长度
一道很好的模板题,比较入门吧
CDQ分治+线段树/树状数组维护最大值就好了
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct nasm{
int x,y,z;
}a[];
int f[];
int tr[];
int tmp[];
int n;
bool cmp(nasm g,nasm u)
{
return g.y<u.y;
}
bool cmq(nasm g,nasm u)
{
return g.x<u.x;
}
void updt(int pi,int v,int l,int r,int spc)
{
if(l==r)
{
tr[spc]=v==?v:max(v,tr[spc]);
return ;
}
int m=(l+r)>>;
if(pi<=m)
updt(pi,v,l,m,spc<<);
else
updt(pi,v,m+,r,spc<<|);
tr[spc]=max(tr[spc<<],tr[spc<<|]);
}
int ask(int ll,int rr,int l,int r,int spc)
{
if(ll>rr)return ;
if(l>=ll&&r<=rr)return tr[spc];
int m=(l+r)>>;
if(m>=rr)return ask(ll,rr,l,m,spc<<);
if(m<ll)return ask(ll,rr,m+,r,spc<<|);
return max(ask(ll,rr,l,m,spc<<),ask(ll,rr,m+,r,spc<<|));
}
void wrk(int l,int r)
{
int mid=(l+r)>>;
sort(a+l,a+mid+,cmp);
sort(a+mid+,a+r+,cmp);
for(int i=l,j=mid+;j<=r;j++)
{
for(;a[i].y<a[j].y&&i<=mid;i++)
updt(a[i].z,f[a[i].x],,n,);
f[a[j].x]=max(f[a[j].x],ask(,a[j].z-,,n,)+);
}
for(int i=l;i<=mid;i++)updt(a[i].z,,,n,);
sort(a+mid+,a+r+,cmq);
}
void cdq(int l,int r)
{
if(l==r)
return ;
int mid=(l+r)>>;
cdq(l,mid);
wrk(l,r);
cdq(mid+,r); }
int erf(int l,int r,int aim)
{
if(l==r)return l;
int m=(l+r)>>;
if(aim<=tmp[m])
return erf(l,m,aim);
return erf(m+,r,aim);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d",&a[i].y,&a[i].z);
f[i]=;
a[i].x=i;
tmp[i]=a[i].z;
}
sort(tmp+,tmp+n+);
for(int i=;i<=n;i++)
a[i].z=erf(,n,a[i].z);
cdq(,n);
int ans=;
for(int i=;i<=n;i++)
ans=max(ans,f[i]);
printf("%d\n",ans);
return ;
}
二维LIS
二维LIS(CDQ分治)的更多相关文章
- BZOJ2244: [SDOI2011]拦截导弹(CDQ分治,二维LIS,计数)
Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截任意速度的导弹,但是以后每一发炮弹都不能高 ...
- HDU 1160 FatMouse's Speed(要记录路径的二维LIS)
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 三维偏序-二维LIS
Another Longest Increasing Subsequence Problem 有两种思路. 思路一: 考虑到如果只有一维,那么可以用f[s]表示长度为s时,最后一个数是多少,把这个想法 ...
- HDU 1025 Constructing Roads In JGShining's Kingdom(二维LIS)
Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- ACdream 1216——Beautiful People——————【二维LIS,nlogn处理】
Beautiful People Special Judge Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (J ...
- SGU 521 North-East ( 二维LIS 线段树优化 )
521. "North-East" Time limit per test: 0.5 second(s)Memory limit: 262144 kilobytes input: ...
- [偏序关系与CDQ分治]【学习笔记】
组合数学真是太棒了 $CDQ$真是太棒了(雾 参考资料: 1.<组合数学> 2.论文 课件 很容易查到 3.sro __stdcall 偏序关系 关系: 集合$X$上的关系是$X$与$X$ ...
- N维偏序:cdq分治
cdq(陈丹琦)分治,是一种类似二分的算法.基本思想同分治: 递归,把大问题划分成若干个结构相同的子问题,直到(L==R): 处理左区间[L,mid]对右区间[mid+1,R]的影响: 合并. 它可以 ...
- 『cdq分治和多维偏序问题』
更新了三维偏序问题的拓展 cdq分治 \(cdq\)分治是一种由\(IOI\ Au\)选手\(cdq\)提出的离线分治算法,又称基于时间的分治算法. 二维偏序问题 这是\(cdq\)分治最早提出的时候 ...
随机推荐
- 荣耀A55高调上市仅仅为孤独求败?
坦白说.华为近年来在手机市场上确实取得了一些成绩.比方之前P6的出现就凭借超薄的设计.突出的性价比让大家看到了国产手机的新希望.按理说.在手机市场上尝到甜头的华为应该继续坚持低价.亲民的路线, ...
- AngularJS初接触
todo.json [ { "action": "Buy Flowers", "done": false }, { "action ...
- 为什么选择Sqoop1
1)大部分企业还在使用sqoop1版本 2)sqoop1能满足公司的基本需求 3)sqoop2 功能还不是很成熟和完善 4)sqoop只是一个工具而已,相对比较简单
- Nginx 代理以及HTTPS (二)
一.HTTPS解析 https 加密 私钥 公钥 http 的握手 是确认网络是连通的. https 的握手 是一个加密的过程 加密图 二. 使用Nginx 部署HTTPS 服务 1.证书生成命令(h ...
- 如何在Centos官网下载所需版本的Centos——靠谱的Centos下载教程
很多小伙伴不知道对应版本的Centos怎么下载,最近小编整理了一份Centos详细的下载教程,希望小伙伴们不在为下不到对应版本的Centos而苦恼. 1.进入Centos官网:https://www. ...
- Vim使用心得总结
基本快捷键 v 进入可视模式 i / a 光标前/后插入模式 I / A 行首/末插入模式 Crtl+c 进入命令模式 Crtl+v 进入块可视模式 Q 进入EX模式 gh 进入选择模式 u 撤销 U ...
- rman 备份并异机恢复
1.RMAN 备份脚本 RUN { CONFIGURE RETENTION POLICY DAYS; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CO ...
- 推荐学习《算法之美:指导工作与生活的算法》中文PDF+英文PDF
我们所有人的生活都受到有限空间和有限时间的限制,因此常常面临一系列难以抉择的问题.在一天或者一生的时光里,哪些事是我们应该做的,哪些是应该放弃的?我们对杂乱无序的容忍底线是什么?新的活动与熟悉并喜爱的 ...
- 【Linux环境编程】获取网卡的实时网速
在windows以下.我们能够看到360或者是qq安全卫士的"安全球".上面显示实时的网速情况.那么在linux里面怎样获取网卡的实时网速?事实上原理非常easy,读取须要获取网速 ...
- [Python] Understand Scope in Python
Misunderstanding scope can cause problems in your application. Watch this lesson to learn how Python ...