[BZOJ4553][HEOI2016/TJOI2016]序列
好像是DP再套个裸的CDQ?
树套树是不可能写树套树的,这辈子都不可能写树套树的
对于一个 \(i\) ,设它最小为 \(a_i\) ,原数为 \(b_i\) ,最大为 \(c_i\)
\(f_i\) 表示 \(i\) 结尾的最长子序列, \(f_i=f_j+1\) , \(j\) 要满足
- \(j<i\)
- \(c_j \leq b_i\)
- \(b_j \leq a_i\)
这不就CDQ套个树状数组就完了嘛QAQ
具体的话,把 \([L,mid]\) 按 \(c\) 排序,\([mid+1,r]\) 按 \(b\) 排序,然后像求三维偏序一样套个树状数组就行了。
处理区间的顺序可能要注意下,树状数组的清空也要控制好复杂度。
然后交了一发就过了0.0
#include<bits/stdc++.h>
#define LL long long
#define fr(i,x,y) for(int i=(x);i<=(y);i++)
#define rf(i,x,y) for(int i=(x);i>=(y);i--)
#define frl(i,x,y) for(int i=(x);i<(y);i++)
using namespace std;
const int N=100005;
const int M=N<<1;
int n,m,a[N],b[N],c[N];
int f[N];
int mx=100000;
int num[N],t[N];
void read(int &x){
char ch=getchar();x=0;
for(;ch<'0'||ch>'9';ch=getchar());
for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+ch-'0';
}
void chkmin(int &x,int y){ if (y<x) x=y; }
void chkmax(int &x,int y){ if (y>x) x=y; }
inline int cmpc(const int &q,const int &w){ return c[q]<c[w]; }
inline int cmpb(const int &q,const int &w){ return b[q]<b[w]; }
inline void ADD(int x,int v){
for(;x<=mx;x+=x&(-x)) chkmax(t[x],v);
}
inline int QRY(int x){
int ans=0;
for(;x;x^=x&(-x)) chkmax(ans,t[x]);
return ans;
}
inline void DEL(int x){
for(;x<=mx;x+=x&(-x)) t[x]=0;
}
void solve(int L,int r){
if (L==r){
chkmax(f[L],1);
return;
}
int mid=(L+r)>>1;
solve(L,mid);
fr(i,L,r) num[i]=i;
sort(num+L,num+mid+1,cmpc);
sort(num+mid+1,num+r+1,cmpb);
int pp1=L,pp2=mid+1;
while(pp1<=mid&&pp2<=r){
int p1=num[pp1],p2=num[pp2];
if (c[p1]<=b[p2]){
ADD(b[p1],f[p1]);
pp1++;
} else{
chkmax(f[p2],QRY(a[p2])+1);
pp2++;
}
}
for(;pp2<=r;pp2++) chkmax(f[num[pp2]],QRY(a[num[pp2]])+1);
fr(i,L,mid) DEL(b[num[i]]);
solve(mid+1,r);
}
int main(){
read(n);read(m);
fr(i,1,n) read(a[i]),b[i]=c[i]=a[i];
int x,y;
fr(i,1,m){
read(x);read(y);
chkmin(a[x],y);
chkmax(c[x],y);
}
solve(1,n);
int ans=0;
fr(i,1,n) chkmax(ans,f[i]);
cout<<ans<<endl;
return 0;
}
[BZOJ4553][HEOI2016/TJOI2016]序列的更多相关文章
- cdq分治(hdu 5618 Jam's problem again[陌上花开]、CQOI 2011 动态逆序对、hdu 4742 Pinball Game、hdu 4456 Crowd、[HEOI2016/TJOI2016]序列、[NOI2007]货币兑换 )
hdu 5618 Jam's problem again #include <bits/stdc++.h> #define MAXN 100010 using namespace std; ...
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 解题报告
P4093 [HEOI2016/TJOI2016]序列 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一 ...
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP
洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...
- BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治
原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...
- BZOJ4553:[HEOI2016/TJOI2016]序列——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4553 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某 ...
- 题解 P4093 【[HEOI2016/TJOI2016]序列】
这道题原来很水的? noteskey 一开始以为是顺序的 m 个修改,然后选出一段最长子序列使得每次修改后都满足不降 这 TM 根本不可做啊! 于是就去看题解了,然后看到转移要满足的条件的我发出了黑人 ...
- BZOJ.4553.[HEOI2016&TJOI2016]序列(DP 树状数组套线段树/二维线段树(MLE) 动态开点)
题目链接:BZOJ 洛谷 \(O(n^2)\)DP很好写,对于当前的i从之前满足条件的j中选一个最大值,\(dp[i]=d[j]+1\) for(int j=1; j<i; ++j) if(a[ ...
- 洛谷 P4093: bzoj 4553: [HEOI2016/TJOI2016]序列
题目传送门:洛谷P4093. 题意简述: 给定一个长度为 \(n\) 的序列 \(a\). 同时这个序列还可能发生变化,每一种变化 \((x_i,y_i)\) 对应着 \(a_{x_i}\) 可能变成 ...
- 【[HEOI2016/TJOI2016]序列】
压行真漂亮 首先这肯定是一个\(dp\)了 设\(dp_i\)表示\(i\)结尾的最长不下降子序列的长度 显然我们要找一个\(j\)来转移 也就是\(dp_i=max(dp_j+1)\) 那么什么样的 ...
随机推荐
- uniapp 与C# 加解密
1 uni-app操作 (1) 打开HBuilderX的视图->显示终端 cd 切换到你项目的根目录 执行命令 npm install crypto-js 安装成功后你的项目根目录会生成node ...
- idea配置maven以及手动添加webapp目录
idea配置maven 点击右下角Configure 点击settings 3 . 设置路径 设置自动导包 4 . 点击创建新工程 5 . 选择maven点击下一步 6 . 7 . 8 . 此时,创建 ...
- 手把手教你吧Python应用到实际开发 不再空谈悟法☝☝☝
手把手教你吧Python应用到实际开发 不再空谈悟法☝☝☝ 想用python做机器学习吗,是不是在为从哪开始挠头?这里我假定你是新手,这篇文章里咱们一起用Python完成第一个机器学习项目.我会手把手 ...
- Redis实现分布式文件夹锁
缘起 最近做一个项目,类似某度云盘,另外附加定制功能,本人负责云盘相关功能实现,这个项目跟云盘不同的是,以项目为分配权限的单位,同一个项目及子目录所有有权限的用户可以同时操作所有文件,这样就很容易出现 ...
- .NET Core开发的iNeuOS物联网平台部署树霉派,从网关到云端整体解决方案。助力2019中国.NET峰会。
2019 中国.NET 开发者峰会正式启动 目 录 1. 概述... 2 2. 树莓派硬件配置... 2 3. 软件信息... 3 4. Raspb ...
- 代码审计-Thinkphp3框架EXP表达式SQL注入
最近看java框架源码也是看的有点头疼,好多还要复习熟悉 还有好多事没做...慢慢熬. 网上好像还没有特别详细的分析 我来误人子弟吧. 0x01 tp3 中的exp表达式 查询表达式的使用格式: $m ...
- 一文了解Mysql
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. Redis系列到上一篇已经全部结束了,从本篇开始进入Mysql系列文章专题.本篇作为Mysql系列专题的开篇文 ...
- 实践开发:vue框架重点知识分析
一个VUE项目的主树: assets文件夹是放静态资源: components是放组件: router是定义路由相关的配置; view视图: app.vue是一个应用主组件: main.js是入口文件 ...
- 聊聊面试-NoClassDefFoundError 和 ClassNotFoundException 区别
(上图是圣卡塔利娜岛,美国南加州的一个小岛,也是 mac OS 10.15 版本的官方默认壁纸) ___ 概述 Hello,大家好,我们又来讲面试中的基础题了,今天这是一道很经典又很猥琐的题 说猥琐是 ...
- python中生成器与迭代器
可迭代对象:一个实现了iter方法的对象是可迭代的 迭代器:一个实现了iter方法和next方法的对象就是迭代器 生成器都是Iterator对象,但list.dict.str虽然是Iterable(可 ...