原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html

题目传送门 - BZOJ4553

题目传送门 - 洛谷P4093

题解

  设$Li$表示第$i$个位置最小值,$Ri$表示最大值$vi$表示原值。

  那么如果$i$能到$j$这个位置,则满足:

  $i<j$

  $rj\leq xi$

  $xi\leq li$

  于是CDQ分治水过。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=100005;
struct Node{
int id,v,L,R,res,x,y;
void get(){
scanf("%d",&v),L=R=v,res=1;
}
}a[N];
bool cmp(Node a,Node b){
if (a.x!=b.x)
return a.x<b.x;
if (a.y!=b.y)
return a.y<b.y;
return a.id<b.id;
}
bool cmpid(Node a,Node b){
return a.id<b.id;
}
int n,m,tree[N];
int lowbit(int x){
return x&-x;
}
void add(int x,int y){
for (;x<=100000;x+=lowbit(x))
tree[x]=max(tree[x],y);
}
void clr(int x){
for (;x<=100000;x+=lowbit(x))
tree[x]=0;
}
int sum(int x){
int ans=0;
for (;x>0;x-=lowbit(x))
ans=max(ans,tree[x]);
return ans;
} void CDQ(int L,int R){
if (L==R)
return;
int mid=(L+R)>>1;
CDQ(L,mid);
for (int i=L;i<=mid;i++)
a[i].x=a[i].R,a[i].y=a[i].v;
for (int i=mid+1;i<=R;i++)
a[i].x=a[i].v,a[i].y=a[i].L;
sort(a+L,a+R+1,cmp);
for (int i=L;i<=R;i++)
if (a[i].id<=mid)
add(a[i].y,a[i].res);
else
a[i].res=max(a[i].res,sum(a[i].y)+1);
for (int i=L;i<=R;i++)
if (a[i].id<=mid)
clr(a[i].y);
sort(a+L,a+R+1,cmpid);
CDQ(mid+1,R);
}
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
a[i].get(),a[i].id=i;
for (int i=1,x,y;i<=m;i++){
scanf("%d%d",&x,&y);
a[x].L=min(a[x].L,y);
a[x].R=max(a[x].R,y);
}
memset(tree,0,sizeof tree);
CDQ(1,n);
int ans=0;
for (int i=1;i<=n;i++)
ans=max(ans,a[i].res);
printf("%d",ans);
return 0;
}

  

BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治的更多相关文章

  1. 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP

    洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...

  2. 洛谷 P4093 [HEOI2016/TJOI2016]序列 解题报告

    P4093 [HEOI2016/TJOI2016]序列 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一 ...

  3. 洛谷P4093 [HEOI2016/TJOI2016]序列

    题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛姐姐已经研究出了所有变化的可能性, ...

  4. 洛谷 P4093 [HEOI2016/TJOI2016]序列(Cdq+dp)

    题面 luogu 题解 \(Cdq分治+dp\) \(mx[i],mn[i]\)分别表示第\(i\)位最大,最小能取到多少 那么有 \(j < i\) \(mx[j] \le a[i]\) \( ...

  5. 洛谷 P2824 [HEOI2016/TJOI2016]排序 解题报告

    P2824 [HEOI2016/TJOI2016]排序 题意: 有一个长度为\(n\)的1-n的排列\(m\)次操作 \((0,l,r)\)表示序列从\(l\)到\(r\)降序 \((1,l,r)\) ...

  6. 洛谷 P4091 [HEOI2016/TJOI2016]求和 解题报告

    P4091 [HEOI2016/TJOI2016]求和 题目描述 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: \[ f(n)=\sum_{i=0}^n\ ...

  7. 【洛谷P4093】 [HEOI2016/TJOI2016]序列 CDQ分治+动态规划

    你发现只会改变一个位置,所以可以直接进行dp 具体转移的话用 CDQ 分治转移就好了~ #include <bits/stdc++.h> #define N 100006 #define ...

  8. Luogu P4093 [HEOI2016/TJOI2016]序列 dp套CDQ

    题面 好久没写博客了..最近新学了CDQ...于是就来发一发一道CDQ的练习题 看上去就是可以dp的样子. 设\(dp_{i}\)为以i结尾的最长不下降序列. 易得:\(dp_{i}\)=\(max( ...

  9. 洛谷P2824 [HEOI2016/TJOI2016]排序(线段树)

    传送门 这题的思路好清奇 因为只有一次查询,我们考虑二分这个值为多少 将原序列转化为一个$01$序列,如果原序列上的值大于$mid$则为$1$否则为$0$ 那么排序就可以用线段树优化,设该区间内$1$ ...

随机推荐

  1. boost.Asio lib

    Documentation for Boost.Asio http://www.boost.org/doc/libs/1_62_0/doc/html/boost_asio.html https://w ...

  2. mysql连表分组报错---- sql_mode=only_full_group_by问题解决

    #### sql语句报错问题 #1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggreg ...

  3. 【原创】Linux基础之文件编码

    查看 1 vi $ vi $file:set fileencoding 2 file $ file $file 修改 $ vi $file:set fileencoding=utf-8

  4. mysql installer gentask怎么关闭

    1 前言 安装mysql community版本的,可能经常会看到mysql installer gentask console框出现,有时候甚烦,我们并不需要它经常检测更新. 2 解决方案 开始/附 ...

  5. iOS9 新功能:Support Universal Links,iOS10 openUrl新函数

    先看官方文档:https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalL ...

  6. python-序列化模块

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

  7. redhat7.3安装python3 pip3

    首先系统自带的python是python2 我们需要安装一个python3(这里的所有源码包都可以在环境中准备好,这样没有网也可以进行安装) 安装python 1.安装环境 # yum -y inst ...

  8. 【进阶3-1期】JavaScript深入之史上最全--5种this绑定全面解析(转)

    这是我在公众号(高级前端进阶)看到的文章,现在做笔记  https://github.com/yygmind/blog/issues/20 this的绑定规则总共有下面5种. 1.默认绑定(严格/非严 ...

  9. liunx 安装jdk1.8

    采用解压压缩文件形式安装 第一步:将jdk压缩文件上传至home目录下面 第二步:目录切换至/usr目录下   cd /usr 创建java目录   mkdir   java 第三步:将jdk 压缩文 ...

  10. Confluence 6 配置一个数据源连接

    这个指南指导你如何配置使用 JNDI 数据源来连接到你的数据库.使用这个类型的连接,Confluence 将会询问应用服务器(Tomcat)中你配置的连接信息. 如果你希望使用 JDBC 的数据库连接 ...