题目传送门:洛谷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 分治 + 数据结构(我用了树状数组)就能解决。

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4
 5 const int MN = 100005;
 6 const int MC = 100000;
 7
 8 int N, M;
 9 int A[MN], Mx[MN], Mn[MN];
10 int f[MN], Ans;
11 int p[MN];
12 inline bool cmp1(int i, int j) { return Mx[i] < Mx[j]; }
13 inline bool cmp2(int i, int j) { return A[i] < A[j]; }
14
15 int B[MN];
16 inline void Ins(int i, int x) { for (; i <= MC; i += i & -i) B[i] = max(B[i], x); }
17 inline void Clr(int i) { for (; i <= MC; i += i & -i) B[i] = 0; }
18 inline int Qur(int i) { int A = 0; for (; i; i -= i & -i) A = max(A, B[i]); return A;}
19
20 void CDQ(int lb, int rb) {
21     if (lb == rb) {
22         f[lb] = max(f[lb], 1);
23         return;
24     }
25     int mid = lb + rb >> 1;
26     CDQ(lb, mid);
27     for (int i = lb; i <= rb; ++i)
28         p[i] = i;
29     sort(p + lb, p + mid + 1, cmp1);
30     sort(p + mid + 1, p + rb + 1, cmp2);
31     int j = lb;
32     for (int i = mid + 1; i <= rb; ++i) {
33         while (j <= mid && Mx[p[j]] <= A[p[i]]) {
34             Ins(A[p[j]], f[p[j]]);
35             ++j;
36         }
37         f[p[i]] = max(f[p[i]], Qur(Mn[p[i]]) + 1);
38     }
39     for (int i = lb; i <= mid; ++i)
40         Clr(A[i]);
41     CDQ(mid + 1, rb);
42 }
43
44 int main() {
45     int x, y;
46     scanf("%d%d", &N, &M);
47     for (int i = 1; i <= N; ++i)
48         scanf("%d", &A[i]),
49         Mx[i] = Mn[i] = A[i];
50     for (int i = 1; i <= M; ++i)
51         scanf("%d%d", &x, &y),
52         Mx[x] = max(Mx[x], y),
53         Mn[x] = min(Mn[x], y);
54     CDQ(1, N);
55     for (int i = 1; i <= N; ++i)
56         Ans = max(Ans, f[i]);
57     printf("%d\n", Ans);
58     return 0;
59 }

转载于:https://www.cnblogs.com/PinkRabbit/p/10096763.html

洛谷 P4093: bzoj 4553: [HEOI2016/TJOI2016]序列相关推荐

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

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

  2. 洛谷 P4151 BZOJ 2115 [WC2011]最大XOR和路径

    //bzoj上的题面太丑了,导致VJ的题面也很丑,于是这题用洛谷的题面 题面描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如 ...

  3. BZOJ.4552.[HEOI2016/TJOI2016]排序(线段树合并/二分 线段树)

    题目链接 对于序列上每一段连续区间的数我们都可以动态开点建一棵值域线段树.初始时就是\(n\)棵. 对于每次操作,我们可以将\([l,r]\)的数分别从之前它所属的若干段区间中分离出来,合并. 对于升 ...

  4. 洛谷 P2046 BZOJ 2007 海拔(NOI2010)

    题目描述 YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)×(n+1)个 ...

  5. 洛谷 P4175: bzoj 1146: [CTSC2008]网络管理

    令人抓狂的整体二分题.根本原因还是我太菜了. 在学校写了一个下午写得头晕,回家里重写了一遍,一个小时就写完了--不过还是太慢. 题目传送门:洛谷P4175. 题意简述: 一棵 \(n\) 个结点的树, ...

  6. 洛谷 3784(bzoj 4913) [SDOI2017]遗忘的集合——多项式求ln+MTT

    题目:https://www.luogu.org/problemnew/show/P3784 https://www.lydsy.com/JudgeOnline/problem.php?id=4913 ...

  7. 洛谷 P4546 bzoj 5020 在美妙的数学王国中畅游 —— LCT+泰勒展开

    题目:https://www.luogu.org/problemnew/show/P4546 先写了个55分的部分分,直接用LCT维护即可,在洛谷上拿了60分: 注意各处 pushup,而且 spla ...

  8. 洛谷 一种堆套路 P1631序列合并、P2085最小函数值

    题目链接 序列合并 最小函数值 题解 这两道题做法基本一样,是使用同一种套路解决的,这里用序列合并来举例说明. 序列合并要求出N2N2N^2个和中最小的N个数. 我们用一个堆来维护我们需要的数,并且保 ...

  9. 洛谷 P4300 BZOJ 1266 [AHOI2006]上学路线route

    题目描述 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可:"很 ...

  10. 洛谷 P2590 BZOJ 1036 [ZJOI2008]树的统计

    Time limit 10000 ms//另外,BZOJ只算所有点的总时限,所以可能会放过一些原本会TLE的代码 Memory limit 165888 kB OS Linux SourceZJOI2 ...

最新文章

  1. python界面颜色怎么改变_pycharm 界面风格修改
  2. 机器学习——数据降维
  3. 【转】使用FiddlerCore来测试WebAPI
  4. qml 信号槽第二次才响应_QML中各种代理的用法
  5. Netty的使用:Server和Client通信
  6. 开启A20线(部分译)
  7. Repast——Agent对象换成图标和显示属性问题
  8. Redmi Book14 pro 通过软件控制风扇转速和噪音
  9. 树莓派 | 摄像头模块的使用方法
  10. 【C#+SQL数据库】企业人事管理系统(含E-R图及源代码下载)
  11. Java对pdf文件进行压缩打包并执行下载
  12. VASP+VTST编译安装
  13. 如何利用COOC软件绘制动态交互图?
  14. AI 智能写情诗、藏头诗
  15. 计算机应用基础张宇答案,计算机应用基础电子教案教学课件作者张宇单选课件.doc...
  16. 模块电路选型(4)----通信模块
  17. 华为鸿蒙系统动画过滤,华为鸿蒙系统细节曝光 UI重绘动画多/系统简介更流畅...
  18. 正点原子linux串口驱动下载,【正点原子Linux连载】第二十一章UART串口通信实验-摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南 (amobbs.com 阿莫电子论坛)...
  19. FinalRecovery
  20. 人工智能对社会的发展

热门文章

  1. php的链接查询,php – 使用指向另一个查询的链接运行查询.
  2. em在聊天中是什么意思_被神化的EM菌,该怎样正确使用?
  3. 六、面向对象编程——类和对象
  4. mysql的动态建表_mysql数据库动态创建表的实例分享
  5. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_04-项目概述-技术栈和开发步骤...
  6. 阶段3 1.Mybatis_03.自定义Mybatis框架_7.自定义Mybatis的编码-实现基于注解配置的查询所有...
  7. cpu的用户态和内核态和内存的用户空间内核空间
  8. Vue集成微信开发趟坑:公众号以及JSSDK相关
  9. 数据结构---最小生成树
  10. PHP基础知识------页面静态化