题目传送门:洛谷P4093

题意简述:

给定一个长度为 \(n\) 的序列 \(a\)。

同时这个序列还可能发生变化,每一种变化 \((x_i,y_i)\) 对应着 \(a_{x_i}\) 可能变成 \(y_i\)。

不会同时发生两种变化。

需要找出一个最长的子序列,使得这个子序列在任意一种变化下都是不降的。

只需要求出这个子序列的长度即可。

注意:可以不发生任何变化。

题解:

记 \(f[i]\) 为以第 \(i\) 项结尾的子序列最长长度。

则有转移:\(f[i]=\max_{j<i}(f[j])+1\),同时还要满足 \(maxval_j\le a_i\) 和 \(a_j\le minval_i\)。

按照项从小到大转移,形成了天然的时间顺序,同时还要满足两个偏序限制。
其中 \(maxval_i\) 表示第 \(i\) 项最大能变成的值,\(minval_i\) 表示第 \(i\) 项最小能变成的值。

算上时间顺序,这是一个三维偏序问题,用 CDQ 分治 + 数据结构(我用了树状数组)就能解决。

 #include <cstdio>
#include <algorithm>
using namespace std; const int MN = ;
const int MC = ; int N, M;
int A[MN], Mx[MN], Mn[MN];
int f[MN], Ans;
int p[MN];
inline bool cmp1(int i, int j) { return Mx[i] < Mx[j]; }
inline bool cmp2(int i, int j) { return A[i] < A[j]; } int B[MN];
inline void Ins(int i, int x) { for (; i <= MC; i += i & -i) B[i] = max(B[i], x); }
inline void Clr(int i) { for (; i <= MC; i += i & -i) B[i] = ; }
inline int Qur(int i) { int A = ; for (; i; i -= i & -i) A = max(A, B[i]); return A;} void CDQ(int lb, int rb) {
if (lb == rb) {
f[lb] = max(f[lb], );
return;
}
int mid = lb + rb >> ;
CDQ(lb, mid);
for (int i = lb; i <= rb; ++i)
p[i] = i;
sort(p + lb, p + mid + , cmp1);
sort(p + mid + , p + rb + , cmp2);
int j = lb;
for (int i = mid + ; i <= rb; ++i) {
while (j <= mid && Mx[p[j]] <= A[p[i]]) {
Ins(A[p[j]], f[p[j]]);
++j;
}
f[p[i]] = max(f[p[i]], Qur(Mn[p[i]]) + );
}
for (int i = lb; i <= mid; ++i)
Clr(A[i]);
CDQ(mid + , rb);
} int main() {
int x, y;
scanf("%d%d", &N, &M);
for (int i = ; i <= N; ++i)
scanf("%d", &A[i]),
Mx[i] = Mn[i] = A[i];
for (int i = ; i <= M; ++i)
scanf("%d%d", &x, &y),
Mx[x] = max(Mx[x], y),
Mn[x] = min(Mn[x], y);
CDQ(, N);
for (int i = ; i <= N; ++i)
Ans = max(Ans, f[i]);
printf("%d\n", Ans);
return ;
}

洛谷 P4093: bzoj 4553: [HEOI2016/TJOI2016]序列的更多相关文章

  1. 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[ ...

  2. 洛谷 P2023 BZOJ 1798 [AHOI2009]维护序列

    题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一 ...

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

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

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

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

  5. BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...

  6. 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; ...

  7. BZOJ 4556 [HEOI2016/TJOI2016]字符串

    BZOJ 4556 [HEOI2016/TJOI2016]字符串 其实题解更多是用后缀数组+数据结构的做法,貌似也不好写. 反正才学了 sam 貌似比较简单的做法. 还是得先二分,然后倍增跳到 $ s ...

  8. 洛谷 P2709 BZOJ 3781 小B的询问

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求$\sum_1^Kc_i^2$的值,其中$c_i$表示数字i在[L..R]中的重复次数.小B请 ...

  9. 洛谷 P2587 BZOJ 1034 [ZJOI2008]泡泡堂

    题目描述 //不知道为什么BZOJ和洛谷都没有这幅图了,大牛们几年前的博客上都有这幅图的,把它贴上来吧 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省 ...

随机推荐

  1. UVA10759_Dice Throwing

    求掷骰子n次,点数之和超过m的概率有多大?分数表示. 两种方法: 1.直接DP.用两个数组分别表示分子和分母,注意计算过程中时时约分. 2.将(x1+x2+x3+x4+x5+x6)n多项式展开,把大于 ...

  2. 题解 P3870 【[TJOI2009]开关】

    这个题我愣是交了好几遍没有过...... 后来@_皎月半洒花dalao告诉我说要^儿子节点的tag,然后就明白了...... 行吧,先上题面: 题目描述 现有N(2 ≤ N ≤ 100000)盏灯排成 ...

  3. mysql的check约束问题

    mysql手册中写道:存储引擎会解析check子句,但是会把它忽略掉 The CHECK clause is parsed but ignored by all storage engines. 现在 ...

  4. Alpha 冲刺 —— 十分之三

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助后端界面的开发 搭建项目运行的服务器环境 ...

  5. 【BZOJ3518】点组计数

    Description 平面上摆放着一个\(n*m\)的点阵(下图所示是一个3*4的点阵).Curimit想知道有多少三点组(a,b,c)满足以a,b,c三点共线.这里a,b,c是不同的3个点,其顺序 ...

  6. 【IOI 2018】Doll 机械娃娃

    我感觉这个题作为Day2T1,有一定的挑战性.为$Rxd$没有完成这道题可惜. 我觉得这道题,如果按照前几个部分分的思路来想,就有可能绕进错误的思路中.因为比如说每个传感器最多只在序列中出现$2$次, ...

  7. Active Directory PowerShell模块收集AD信息

    0x00 前言简介 Microsoft为Windows Server 2008 R2(以及更高版本)提供了多个Active Directory PowerShell cmdlet,这大大简化了以前需要 ...

  8. Java之List和Set

    List.Set.数据结构.Collections 初次学习,涉及到List集合,Set集合和数据结构方面的一些知识,有错误还请批评指正 数据结构 数据存储的常用结构有:栈.队列.数组.链表和红黑树. ...

  9. 2018.10.20 2018-2019 ICPC,NEERC,Southern Subregional Contest(Online Mirror, ACM-ICPC Rules)

    i207M的“怕不是一个小时就要弃疗的flag”并没有生效,这次居然写到了最后,好评=.= 然而可能是退役前和i207M的最后一场比赛了TAT 不过打得真的好爽啊QAQ 最终结果: 看见那几个罚时没, ...

  10. 解题:BZOJ 3884 上帝与集合的正确用法

    题面 好久以前写的,发现自己居然一直没有写题解=.= 扩展欧拉定理:在$b>φ(p)$时有$a^b \equiv a^{b\%φ(p)+φ(p)}(mod$ $p)$ 然后每次递归那个$a^{b ...