题目描述

给定一个长度为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分治)的更多相关文章

  1. BZOJ2244: [SDOI2011]拦截导弹(CDQ分治,二维LIS,计数)

    Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截任意速度的导弹,但是以后每一发炮弹都不能高 ...

  2. HDU 1160 FatMouse's Speed(要记录路径的二维LIS)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. 三维偏序-二维LIS

    Another Longest Increasing Subsequence Problem 有两种思路. 思路一: 考虑到如果只有一维,那么可以用f[s]表示长度为s时,最后一个数是多少,把这个想法 ...

  4. 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 ...

  5. ACdream 1216——Beautiful People——————【二维LIS,nlogn处理】

    Beautiful People Special Judge Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (J ...

  6. SGU 521 North-East ( 二维LIS 线段树优化 )

    521. "North-East" Time limit per test: 0.5 second(s)Memory limit: 262144 kilobytes input: ...

  7. [偏序关系与CDQ分治]【学习笔记】

    组合数学真是太棒了 $CDQ$真是太棒了(雾 参考资料: 1.<组合数学> 2.论文 课件 很容易查到 3.sro __stdcall 偏序关系 关系: 集合$X$上的关系是$X$与$X$ ...

  8. N维偏序:cdq分治

    cdq(陈丹琦)分治,是一种类似二分的算法.基本思想同分治: 递归,把大问题划分成若干个结构相同的子问题,直到(L==R): 处理左区间[L,mid]对右区间[mid+1,R]的影响: 合并. 它可以 ...

  9. 『cdq分治和多维偏序问题』

    更新了三维偏序问题的拓展 cdq分治 \(cdq\)分治是一种由\(IOI\ Au\)选手\(cdq\)提出的离线分治算法,又称基于时间的分治算法. 二维偏序问题 这是\(cdq\)分治最早提出的时候 ...

随机推荐

  1. 《JSP+Servlet+Tomcat应用开发从零開始学》

    当当网页面:  http://product.dangdang.com/23619990.html 内容简单介绍      本书全面介绍了 JSP开发中涉及的相关技术要点和实战技巧. 全书结构清晰,难 ...

  2. Beta分布从入门到精通

    近期一直有点小忙,可是不知道在瞎忙什么,最终有时间把Beta分布的整理弄完. 以下的内容.夹杂着英文和中文,呵呵- Beta Distribution Beta Distribution Defini ...

  3. Coderfroces 864 D. Make a Permutation!

    D. Make a Permutation! Ivan has an array consisting of n elements. Each of the elements is an intege ...

  4. WISP > Client+AP > WDS  的区别

    最直白易懂的分别:WISP > Client+AP > WDS WISP,真正万能,兼容任何厂牌的上级AP,毋须设置上级AP,不受上级AP的信道影响,自由DHCP,所带机器或设备的IP,上 ...

  5. 紫书 习题 10-16 UVa 1647 (高精度+递推)

    这道题我已经推出00和1过两步变成00了,可我没有继续做下去-- 后来看了博客发现自己已经做了90%了-- 可惜了,以后不要轻易放弃. 1的个数有个规律,就是每次都乘以2,因为0和1下一步都会变出1 ...

  6. Android性能优化之提高ListView性能的技巧

    ListView优化一直是一个老生常谈的问题.无论是面试还是寻常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看怎样最大化的优化ListView的性能. 1.在adapter中的ge ...

  7. IOS基础学习日志(七)利用dispatch_once创建单例及使用

    自苹果引入了Grand Central Dispatch (GCD)(Mac OS 10.6和iOS4.0)后,创建单例又有了新的方法,那就是使用dispatch_once函数,当然,随着演进的进行. ...

  8. CF 439C(251C题)Devu and Partitioning of the Array

    Devu and Partitioning of the Array time limit per test 1 second memory limit per test 256 megabytes ...

  9. javascript 将时间戳格式化

    <script>function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleString().repl ...

  10. 浏览器加载跟渲染html的顺序-css渲染效率的探究

    1.浏览器加载和渲染html的顺序1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都 ...