[HNOI2016]序列 CDQ+DP
[HNOI2016]序列 CDQ
链接
思路
一个点最小变为l,最大变为r,不变的时候为v
那么j能在i前面就要满足。
\(j<i\)
\(r[j]<=v[i]\)
\(v[j]<=l[i]\)
这个可以三位偏序CDQ优化DP。
代码
#include <bits/stdc++.h>
using namespace std;
const int _=1e5+7;
int n,m,f[_],ans;
struct node {int i,v,l,r;}a[_];
bool cmp0(node a,node b) {return a.v<b.v;}
bool cmp1(node a,node b) {return a.l<b.l;}
bool cmp2(node a,node b) {return a.i<b.i;}
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
namespace BIT {
int ma[_];
void add(int x,int val) {for(;x<=100000;x+=(x&(-x))) ma[x]=max(ma[x],val);}
void clear(int x) {for(;x<=100000;x+=(x&(-x))) ma[x]=0;}
int query(int x) {int ans=0;for(;x>=1;x-=(x&(-x))) ans=max(ans,ma[x]);return ans;}
}
void cdq(int l,int r) {
if(l==r) {f[l]=max(f[l],1);return;}
int mid=(l+r)>>1;
cdq(l,mid);
sort(a+l,a+mid+1,cmp0);
sort(a+mid+1,a+r+1,cmp1);
for(int i=mid+1,j=l;i<=r;++i) {
for(;a[j].v<=a[i].l&&j<=mid;j++)
BIT::add(a[j].r,f[a[j].i]);
f[a[i].i]=max(f[a[i].i],BIT::query(a[i].v)+1);
}
for(int i=l;i<=mid;++i) BIT::clear(a[i].r);
sort(a+mid+1,a+r+1,cmp2);
cdq(mid+1,r);
}
int main() {
n=read(),m=read();
for(int i=1;i<=n;++i) a[i].l=a[i].r=a[i].v=read(),a[i].i=i;
for(int i=1;i<=m;++i) {
int x=read(),y=read();
a[x].l=min(a[x].l,y);
a[x].r=max(a[x].r,y);
}
cdq(1,n);
for(int i=1;i<=n;++i) ans=max(ans,f[i]);
printf("%d\n",ans);
return 0;
}
[HNOI2016]序列 CDQ+DP的更多相关文章
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP
洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...
- BZOj 4540: [Hnoi2016]序列 [莫队 st表 预处理]
4540: [Hnoi2016]序列 题意:询问区间所有子串的最小值的和 不强制在线当然上莫队啦 但是没想出来,因为不知道该维护当前区间的什么信息,维护前后缀最小值的话不好做 想到单调栈求一下,但是对 ...
- 【LG3246】[HNOI2016]序列
[LG3246][HNOI2016]序列 题面 洛谷 题解 60pts 对于每个位置\(i\),单调栈维护它往左第一个小于等于它的位置\(lp_i\)以及往右第一个小于它的位置\(rp_i\). 那么 ...
- 4540: [Hnoi2016]序列
4540: [Hnoi2016]序列 https://www.lydsy.com/JudgeOnline/problem.php?id=4540 分析: 莫队+RMQ+单调栈. 考虑加入一个点后,区间 ...
- [BZOJ4540][HNOI2016]序列 莫队
4540: [Hnoi2016]序列 Time Limit: 20 Sec Memory Limit: 512 MB Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n ...
- BZOJ4540 Hnoi2016 序列 【莫队+RMQ+单调栈预处理】*
BZOJ4540 Hnoi2016 序列 Description 给定长度为n的序列:a1,a2,-,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,-,ar- ...
- codevs 1962 马棚问题--序列型DP
1962 马棚问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 每天,小明和他的马外出,然后他们一边跑一边玩耍.当他们结束 ...
- 【BZOJ4540】[Hnoi2016]序列 莫队算法+单调栈
[BZOJ4540][Hnoi2016]序列 Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,a ...
- [Bzoj4540][Hnoi2016] 序列(莫队 + ST表 + 单调队列)
4540: [Hnoi2016]序列 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1567 Solved: 718[Submit][Status] ...
随机推荐
- 阿里 P8 高级架构师吐血总结的 《Java 核心知识整理&面试.pdf》| 免费分享
最近在网上发现一份非常棒的 PDF 资料,据说是阿里 P8 级高级架构师吐血总结的, 其中内容覆盖很广,包括 Java 核心基础.Java 多线程.高并发.Spring.微服务.Netty 与 RPC ...
- Linux学习笔记之rsync配置
0x00 rsync 简介 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录. ...
- 使用SqlConnectionStringBuilder构造数据库连接字符串
在实际开发过程中,很多时候会拷贝一个现有的数据库连接字符串,修改对应的数据库名.用户名.密码等配置成新的数据库连接字符串.但是有时候我们需要增加一些额外的配置,比如超时时间,最大连接池等,此时我们可以 ...
- C#使用表达式树动态调用方法并实现99乘法表
我们在使用C#编程的时候,经常使用反射来动态调用方法,但有时候需要动态的生成方法,下面介绍使用表达式树的方式来自动生成方法,并调用. 首先需要说明什么是表达式,熟悉Linq的程序猿都用过类似于下面的代 ...
- javascript Class.method vs Class.prototype.method(类方法和对象方法)
在stackoverflow上看到一个这样的提问,以下代码有什么区别? Class.method = function () { /* code */ } Class.prototype.method ...
- 2019 开创java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.开创等公司offer,岗位是Java后端开发,因为发展原因最终选择去了开创,入职一年时间了,也成为了面试官,之 ...
- 33、vue中的事件修饰符.stop、.prevent、.self、.capture、.once
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Spring中基于注解的IOC(一):基础介绍
1. Spring中的常用注解 注解配置和xml配置要实现的功能都是一样的,都要降低程序的耦合,只是配置的形式不一样 xml中配置示例: 注解分类: 1.用于创建对象的注解 它们的作用就和在xml中编 ...
- React 性能优化之组件动态加载(react-loadable)
React 项目打包时,如果不进行异步组件的处理,那么所有页面所需要的 js 都在同一文件中(bundle.js),整个js文件很大,从而导致首屏加载时间过长. 所有,可以对组件进行异步加载处理,通常 ...
- [linux]查找最大的文件
查找最大的日志文件,命令: find ./ -type f | xargs -I{} du -m {}|sort -rnk1|head -10 offline一台机器保留限产,其他机器删除日志,命令: ...