[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] ...
随机推荐
- Java+Python+前端 学习资料大全 百度云盘
Java架构师3大阶段 链接:https://pan.baidu.com/s/1DlXh33y5t4cZUmZH0cLvCw 提取码:5s76 2019前端架构阶段 链接:https://pan.ba ...
- 我的第一个netcore2.2 api项目搭建(一)
早早就想入门netcore,一直没下定决心,这次正好碰上项目服务变更,便想着入坑试试,边学边用. 目标: 一.api使用core版的SqlSugar,集成orm,实现快速开发 二.api使用Swagg ...
- Excel导出,添加有效性
#region 添加有效性 DataTable dt = LAbll.LogisticsAccounts(DeptId); //查数据 if (dt.Rows.Count < 20) //有效 ...
- Kruskal算法&Prim算法
最小生成树是什么? Kruskal算法 图文转载自a2392008643的博客 此算法可以称为"加边法",初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最 ...
- 人脸跟踪开源项目HyperFT代码算法解析及改进
一.简介 人脸识别已经成为计算机视觉领域中最热门的应用之一,其中,人脸信息处理的第一个环节便是人脸检测和人脸跟踪.人脸检测是指在输入的图像中确定所有人脸的位置.大小和姿势的过程.人脸跟踪是指在图像序列 ...
- 聊一下domain和entity
这段时间在负责海外事务,今天带着客户端走海外商店的支付流程.因为在国内接的大多数是渠道聚合的SDK,客户端就很少关注支付业务流程,只是按照以前的接的demo然后按照渠道提供的参数就直接上了.先po一张 ...
- Python3 解决windows里PIP下载安装速度慢
直接保存为xxx.py运行即可 自动在用户文件夹创建pip文件夹,并创建配置文件:pip.ini 从此告别pip install XXXX 下载模块速度超级慢的问题! # -*- coding: ut ...
- UISlider基本使用
UISlider是一个很常用的UI控件,调节屏幕亮度或者调节音量大小等很多地方都可以用到,而且使用方便,下面我来介绍一下UISlider的基本使用. 首先介绍一下基本属性和常用方法: //设置当前sl ...
- 搭建idea出现无法自动映射Mapper问题
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 如出这种问题,导致的原因是mapp.xm ...
- CDA数据分析【第一章:数据分析概述】
一.数据分析行业发展 1.如何收集.保存.管理.分析.共享正在呈指数式增长的数据是我们必须要面对的一个重要挑战. 2.数据分析包括数据采集.数据存储.检查.清洗.分析.转换和建模等方法对数据进行处理的 ...