【[HEOI2016/TJOI2016]序列】
压行真漂亮
首先这肯定是一个\(dp\)了
设\(dp_i\)表示\(i\)结尾的最长不下降子序列的长度
显然我们要找一个\(j\)来转移
也就是\(dp_i=max(dp_j+1)\)
那么什么样的\(j\)满足条件呢
首先得是\(j<i\)
我们还注意到一个条件就是这个序列里最多也只有一个位置会发生变化
可能是\(i\)这个位置发生变化,那么显然需要满足对于任意的\(a_i\)都需要满足大于等于\(val_j\)
于是就有\(val_j<=min_i\)
自然也有可能是前面的\(j\)发生变化,显然就是\(max_j<=val_i\)
之后这就是一个三维偏序了,\(CDQ\)分治就可以啦
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define re register
#define lowbit(x) ((x)&(-x))
#define maxn 100005
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read()
{
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
int n,m,M;
int c[maxn];
inline void add(int x,int val) {for(re int i=x;i<=M;i+=lowbit(i)) c[i]=max(c[i],val);}
inline void clear(int x) {for(re int i=x;i<=M;i+=lowbit(i)) c[i]=0;}
inline int ask(int x) {int now=0;for(re int i=x;i;i-=lowbit(i)) now=max(c[i],now);return now;}
struct Point {int x,y,rk,ans,v;}a[maxn];
inline int cmp1(Point A,Point B) {return A.x<B.x;}
inline int cmp2(Point A,Point B) {return A.v<B.v;}
inline int cmp3(Point A,Point B) {return A.rk<B.rk;}
void CDQ(int s,int t)
{
if(s==t) return;
int mid=s+t>>1;
CDQ(s,mid),std::sort(a+s,a+mid+1,cmp2),std::sort(a+mid+1,a+t+1,cmp1);
int i=s,j=mid+1;
while(i<=mid&&j<=t)
if(a[i].v<=a[j].x) add(a[i].y,a[i].ans),i++;
else {int now=ask(a[j].v)+1;a[j].ans=max(a[j].ans,now),j++;}
while(j<=t) {int now=ask(a[j].v)+1;a[j].ans=max(a[j].ans,now),j++;}
for(re int k=s;k<i;k++) clear(a[k].y);
std::sort(a+mid+1,a+t+1,cmp3);CDQ(mid+1,t);
}
int main()
{
n=read(),m=read();
int A,B; for(re int i=1;i<=n;i++) a[i].x=a[i].y=read(),M=max(M,a[i].x),a[i].rk=i,a[i].ans=1,a[i].v=a[i].x;
for(re int i=1;i<=m;i++) A=read(),B=read(),a[A].y=max(a[A].y,B),M=max(M,a[A].y),a[A].x=min(a[A].x,B);
CDQ(1,n);int tot=0;for(re int i=1;i<=n;i++) tot=max(tot,a[i].ans);printf("%d\n",tot);
return 0;
}
【[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 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...
- 题解 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}\) 可能变成 ...
- BZOJ4553:[HEOI2016/TJOI2016]序列——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4553 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某 ...
- Luogu P4093 [HEOI2016/TJOI2016]序列 dp套CDQ
题面 好久没写博客了..最近新学了CDQ...于是就来发一发一道CDQ的练习题 看上去就是可以dp的样子. 设\(dp_{i}\)为以i结尾的最长不下降序列. 易得:\(dp_{i}\)=\(max( ...
- 洛谷P4093 [HEOI2016/TJOI2016]序列
题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛姐姐已经研究出了所有变化的可能性, ...
随机推荐
- lodop判断是否打印成功
需要引用js <script src="js/jquery-3.3.1.js"></script> <script src="js/Lodo ...
- js复选框全选反选
本篇文章是关于复选框的,有2种形式:1.全选.反选由2个按钮实现:2.全选.反选由一个按钮实现. <!DOCTYPE html> <html> <head> < ...
- 【SSH网上商城项目实战04】EasyUI菜单的实现
转自:https://blog.csdn.net/eson_15/article/details/51297705 上一节我们使用EasyUI搭建了后台页面的框架,这一节我们主要使用EasyUI技术简 ...
- 《JavaWeb从入门到改行》fileupload,没毛病
目录: » fileupload API > 文件上传的要求 > fileupload组件 » 上传细节的代码演示 » 项目案例-上传头像并显示 fileupload API 文 ...
- Jquery获取radio选中的值
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Django中用Jquery实现不刷新页面进行身份验证和计算器功能
1.下载jquery http://www.jq22.com/jquery-info122 下载解压之后加入工程中的static文件夹中 2.路由分发. """Djang ...
- 【数据库】10.0 MySQL常用语句(一)
显示数据库语句: SHOW DATABASES 只是显示数据库的名字 显示数据库创建语句: SHOW CREATE DATABASE db_name 数据库删除语句: DROP DATABASE ...
- Android学习笔记(5)----启动 Theme.Dialog 主题的Activity时程序崩溃的解决办法
新建了一个Android Studio工程,在MainActivity的主界面中添加了两个按钮,点击其中一个按钮用来启动 NormalActivity,点击另一按钮用来启动DialogActivity ...
- FineReport如何手动推送APP消息
在报表填报成功后,发送消息至APP会提示数据已更新.再次期间用户需要有查看该模板的权限,如果没有的话,则无法接受到提示信息.那么在FineReport移动端中,如何手动推送APP消息呢? 具体用法 在 ...
- volley2--volley的使用和架构
图片: 下面只是笼统的介绍,大家可以对比自己的想法,看看自己是不是有什么考虑不周的(如果是你实现这样一个框架的话) 1,Request的设计,我们在得到response之后,我们可能根据项目需求希望有 ...