BZOJ.4553.[HEOI2016TJOI2016]序列(DP 树状数组套线段树/二维线段树(MLE) 动态开点)

题目链接:BZOJ 洛谷
\(O(n^2)\)DP很好写,对于当前的i从之前满足条件的j中选一个最大值,\(dp[i]=d[j]+1\)

 for(int j=1; j<i; ++j)if(a[j]<=minv[i]&&maxv[j]<=a[i])//序列只会变换一次 dp[i]=max{dp[j]+1};

转移要满足两个条件:\(a[j]<=minv[i]\ \&\&\ maxv[j]<=a[i]\)
一个二维偏序问题,CDQ、树套树都可以。
\(minv[x]\)\(a[y]\)作为两个坐标轴,\(dp[j]\)表示其上一点\((A[j],maxv[j])\).
这样就成了一个二维平面,可以向其中插入一些点dp[i],询问一个矩形区域(也是一段前缀)中某点最大值
线段树套线段树 树状数组套线段树都可做 复杂度\(O(nlog^2n)\)
后者时间还可以
树状数组套线段树:

//企图二维树状数组 但动态开点的话 中间一段没有的区间会中断y方向的Query..
#include<cstdio>
#include<cctype>
#include<algorithm>
#define gc() getchar()
#define now node[rt]
#define lson l,m,node[rt].ls
#define rson m+1,r,node[rt].rs
#define lb(x) ((x)&-(x))
const int N=1e5+5;int n,m,A[N],minv[N],maxv[N],MaxV,MaxA;
namespace Tree_2D
{struct Seg_Tree{struct Node{int maxv,ls,rs;}node[N<<6];//还要再小点。。不然BZOJ上依旧MLE inline int new_Node(){static int cnt=0;return ++cnt;}void Insert(int l,int r,int &rt,int p,int v){if(!rt) rt = new_Node();now.maxv = std::max(now.maxv, v);if(l<r){int m=l+r>>1;if(p<=m) Insert(lson,p,v);else Insert(rson,p,v);}}int Query(int l,int r,int rt,int L,int R){if(!rt) return 0;if(L<=l && r<=R) return now.maxv;int m=l+r>>1;if(L<=m)if(m<R) return std::max(Query(lson,L,R),Query(rson,L,R));else return Query(lson,L,R);return Query(rson,L,R);}}t;struct Bit{int root[N];void Insert(int p,int y,int v){while(p<=MaxV)t.Insert(1,MaxA,root[p],y,v), p+=lb(p);}int Query(int p,int y){int res=0;while(p)res=std::max(res,t.Query(1,MaxA,root[p],1,y)), p-=lb(p);return res;}}t2D;
}
#undef now
inline int read()
{int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now;
}int main()
{n=read(),m=read();for(int i=1; i<=n; ++i)maxv[i]=minv[i]=A[i]=read(), MaxA=std::max(MaxA,A[i]);for(int x,y,i=1; i<=m; ++i)x=read(), y=read(), maxv[x]=std::max(maxv[x],y), minv[x]=std::min(minv[x],y);for(int i=1; i<=n; ++i) MaxV=std::max(MaxV,maxv[i]);int ans=0;for(int v,i=1; i<=n; ++i){v = Tree_2D::t2D.Query(minv[i],A[i]) + 1;Tree_2D::t2D.Insert(A[i],maxv[i],v);ans=std::max(ans,v);}printf("%d",ans);return 0;
}

二维线段树:

/*
BZOJ上直接MLE...洛谷P4093 4508ms(比Bit套Segtree慢3倍+) 293.33MB 
空间消耗比较大 写指针吧。。
*/
#include<cstdio>
#include<cctype>
#include<algorithm>
#define gc() getchar()
#define lson l,m,rt->ls
#define rson m+1,r,rt->rs
const int N=1e5+5;int n,m,A[N],maxv[N],minv[N],MaxA,MaxV;
namespace Seg_Tree2D
{struct Node{int maxv;Node *ls,*rs;Node(): maxv(0),ls(NULL),rs(NULL) { }}pool[N<<7];//(logN)^2=256(2^8) 开得小点吧要不空间会炸 struct Node2D{Node *root;Node2D *ls,*rs;Node2D(): root(NULL),ls(NULL),rs(NULL) { }}pool2D[N<<1],*root;inline Node *new_Node(){static int cnt=0;return &pool[cnt++];}inline Node2D *new_Node2D(){static int cnt=0;return &pool2D[cnt++];}Node2D *Build(int l,int r){Node2D *rt = new_Node2D();if(l<r){int m=l+r>>1;rt->ls = Build(l,m);rt->rs = Build(m+1,r);}return rt;}int Query(int l,int r,Node *rt,int L,int R){if(!rt) return 0;if(L<=l && r<=R) return rt->maxv;int m=l+r>>1;if(L<=m)if(m<R) return std::max(Query(lson,L,R),Query(rson,L,R));else return Query(lson,L,R);return Query(rson,L,R);}int Query2D(int l,int r,Node2D *rt,int L,int R,int y1,int y2){if(L<=l && r<=R) return Query(1,MaxA,rt->root,y1,y2);int m=l+r>>1;if(L<=m)if(m<R) return std::max(Query2D(lson,L,R,y1,y2),Query2D(rson,L,R,y1,y2));else return Query2D(lson,L,R,y1,y2);return Query2D(rson,L,R,y1,y2);}void Insert(int l,int r,Node *&rt,int p,int v){if(!rt) rt = new_Node();//!rt->maxv = std::max(rt->maxv, v);if(l<r){int m=l+r>>1;if(p<=m) Insert(lson,p,v);else Insert(rson,p,v);}}void Insert2D(int l,int r,Node2D *rt,int p,int y,int v){Insert(1, MaxA, rt->root, y, v);if(l<r){int m=l+r>>1;if(p<=m) Insert2D(lson,p,y,v);else Insert2D(rson,p,y,v);}}void Init(){root = Build(1,MaxV);}int Query_Max(int l,int r,int y1,int y2){return Query2D(1,MaxV,root,l,r,y1,y2);}void Insert_Node(int x,int y,int v){Insert2D(1,MaxV,root,x,y,v);}
}
inline int read()
{int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now;
}int main()
{n=read(),m=read();for(int i=1; i<=n; ++i)maxv[i]=minv[i]=A[i]=read(), MaxA=std::max(MaxA,A[i]);for(int x,y,i=1; i<=m; ++i)x=read(), y=read(), maxv[x]=std::max(maxv[x],y), minv[x]=std::min(minv[x],y);for(int i=1; i<=n; ++i) MaxV=std::max(MaxV,maxv[i]);Seg_Tree2D::Init();int ans=0;for(int v,i=1; i<=n; ++i){v = Seg_Tree2D::Query_Max(1,minv[i],1,A[i]) + 1;Seg_Tree2D::Insert_Node(A[i],maxv[i],v);ans=std::max(ans,v);}printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/8440693.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 快速构建ssm项目_SSM快速搭建

基本环境搭建1、 创建Maven工程2、 导入项目相关依赖的jar包springspringmvcmybatismysqljunitspring-testlombokdevtoolsxmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org…

jpa 查询 列表_终极JPA查询和技巧列表–第2部分

jpa 查询 列表这一部分是该系列文章的第一部分 。 JPA&#xff1a;NamedQuery&#xff0c;使用日期查询&#xff0c;有关getSingleResult方法的警告 为了避免重复查询代码&#xff0c;提高性能并简化维护查询&#xff0c;我们可以使用NamedQueries。 NamedQuery使用JPQL作为语…

IE针对Ajax请求结果的缓存IE浏览器同一个请求第二次是缓存数据不刷新

IE针对Ajax请求结果的缓存IE浏览器同一个请求第二次是缓存数据不刷新 IE针对Ajax请求结果的缓存/ IE浏览器同一个请求第二次是缓存 一.在AJAX请求的属性上直接设置cache function getSetServer (selectIDs) {$.ajax({url:/kl_eas/v1/monitor/servers? new Date().toTimeString…

亿联本科java_厦门亿联2018面试题

一、选择器public class EqTest {public static void main(String[] args) {EqTest e new EqTest();}public EqTest() {String s "Java";String s2 "java";//if (s.equalsIgnoreCase(s2)){System.out.println("相等");} else {System.out.pri…

如何将云持久存储添加到JBoss Cool Store

我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 带有JBoss Cool Store的App Dev Cloud 上个月&#xff0c;我们提供了一个完整的零售示例&#xff0c;其中的JBoss Cool Store运行在您的堆栈的OpenShift Enterprise层上&#xff0c;由…

吴莫烦

https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-1-NN/转载于:https://www.cnblogs.com/lhuser/p/8446525.html

mysql 表单属性_php表单常用属性有什么?

程序开发中&#xff0c;必不可少的会使用到form表单&#xff0c;以前只是在前端开发时简单使用&#xff0c;对它的属性不甚了解&#xff0c;最近在后端学习中&#xff0c;不断接触到它的属性,现记录一二。下面本篇文章给大家介绍php表单常用的5个属性。actionaction规定了提交表…

centos-安装python3.6环境并配置虚拟环境

python3.6下载地址&#xff1a;https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz linux下python环境配置 统一目录&#xff1a; 源码存放位置 $HOME/tools安装目录&#xff1a; /application安装python环境&#xff1a; 1. 下载 # 创建下载目录 mkdir $HOME/tools #…

java构造器详解_Java中关于构造器的使用详解

这篇文章主要介绍了Java构造器使用方法及注意事项的相关资料,这里举例说明如何使用构造器及需要注意的地方&#xff0c;需要的朋友可以参考下Java构造器使用方法及注意事项超类的构造器在子类的构造器运行之前运行&#xff0c;也就是说&#xff0c;在创建对象时&#xff0c;先运…

i219 2012驱动_2012年I / O之后

i219 2012驱动从注册到赠品&#xff0c;每年的I / O疯狂都在不断发展。 在今年20分钟内被出售&#xff0c;并没有阻止Google赠送更多的东西。 以这种速度并有望在明年发布Google Glass&#xff0c;明年注册很可能会变得更加混乱&#xff01; 因此&#xff0c;Google&#xff0c…

Mac 工程化工具

工程化工具 一、HomeBerw 安装 / 卸载 Mac系统的包管理器&#xff0c;用于安装NodeJS和一些其他必需的工具软件 1.安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 译注&#xff1a;在Max OS X 10.11&…

java的sql的like_[Java教程]SQL like 模糊查询, in

[Java教程]SQL like 模糊查询, in0 2018-09-14 11:00:38​[{"互联网":["网络媒体","微博","墨迹天气","河北天气","其他"]},{"气象部门":["灾害大典","灾情普查","灾情直报&q…

9.管好进程和服务

1.查看进程 1.进程分类进程一般分为交互进程、批处理进程和守护进程三类。上述三种进程各有各的作用&#xff0c;使用场合也有所不同。 交互进程&#xff1a;由一个 shell 启动的进程。交互进程既可以在前台运行&#xff0c;也可以在后台运行。 批处理进程&#xff1a;这种…

惠而浦:使用Netty和Kafka的微服务

介绍 在上一个博客中 &#xff0c;我介绍了Netty用作Web服务器。 该示例运行良好……只要需要广播服务器即可。 大多数情况下不是很有用。 更有可能的是&#xff0c;每个客户端仅接收针对其的数据&#xff0c;并保留了特殊情况下的广播&#xff0c;例如“服务器在15分钟内停机…

石化总部java面试题_中国石化面试经验

面试过程&#xff1a;首先&#xff0c;上午进行面试人员签到&#xff0c;大约100人左右。一共要2个人。下午1点半开始统一面试。人员较多&#xff0c;所以每个人只有3分钟时间&#xff0c;一共最少8位面试官。过程中&#xff0c;他们很少提问题&#xff0c;如果你的技术比较新颖…

ajax标准

$.ajax({url:"localhost:8889/server", //请求的url地址dataType:"json", //返回格式为jsonasync:true,//请求是否异步&#xff0c;默认为异步&#xff0c;这也是ajax重要特性data:{"id":"value"}, //参数值type:"GET&qu…

java 生成器 设计模式_Java中的生成器设计模式

java 生成器 设计模式Java 中的 Builder设计模式是一种创建模式&#xff0c;即用于创建对象&#xff0c;类似于 工厂方法设计模式 &#xff0c;这也是创建设计模式。 在学习任何设计模式之前&#xff0c;我建议先找出特定设计模式要解决的问题。 众所周知&#xff0c; 必要性是…

python倒排索引实现_倒排索引原理和实现 - uncle_LLD的个人空间 - OSCHINA - 中文开源技术交流社区...

关于倒排索引搜索引擎通常检索的场景是&#xff1a;给定几个关键词&#xff0c;找出包含关键词的文档。怎么快速找到包含某个关键词的文档就成为搜索的关键。这里我们借助单词——文档矩阵模型&#xff0c;通过这个模型我们可以很方便知道某篇文档包含哪些关键词&#xff0c;某…

Spring RESTful Web服务中的异常处理

1.简介 我们可能已经在Spring中遇到了几种处理RESTful Web服务应用程序中异常的方法。 在本文中&#xff0c;我们将尝试探索可以采取的最佳方法来实现有效的异常处理。 2.问题陈述 让我们创建一个简单的应用程序&#xff0c;该应用程序将在REST URI中标识员工姓名。 如果请求中…

java调python画图_Python Matplotlib plot 绘图

1、绘制x和y点plot()函数用于在图中绘制点(标记)。默认情况下&#xff0c;plot()函数在点到点之间画一条线。该函数具有用于在图中指定点的参数。参数1是一个数组&#xff0c;其中包含x轴上的点。参数2是一个包含y轴上的点的数组。如果需要绘制从(1&#xff0c;3)到(8&#xff…