可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP
这种类型的 dp 的特点就是大部分转移形如 \(f(i,j)\rightarrow f(i+1,j+1)\) 之类的,并且当以上转移出现时原数组被清空,这就可以用一个 deque 来维护,然后对于全局赋值/全局加,需要对每个位置维护一个时间戳,并记录上一次赋值/加是什么时候,以便标记下传。
(貌似可以用其他方式迅速计算的式子都可以变成一个简单的 dp 形式,然后用以上的方法维护?)
题目阴间的条件 \(i-w_i<m\)(其中 \(w_i\) 为前 \(i\) 个数的 mex)应该要想到换元 \(c_i=i-w_i\),那么 \(c_i<m\) 的形式显然会更适合 dp 以及后期的 dp 优化。接下来就是思考对于一个固定的序列 \(c_i\) 如何计算有几种符合条件的 \(p_i\)。
发现 \(p_i\) 的计数仅与 \(c_{i+1}\neq c_i+1\) 是哪些 \(i\) 有关,所以将它们设元 \(Y_i\)。对于 \(Y_1\le Y_2\ge Y_3\le Y_4\ge Y_5\le\dots\) 这样的形式,将所有小于等于号容斥成大于号应该是一个重要的思想。
所有 \(f(i,j)\rightarrow f(i+1,j')\) 且满足 \(j'-j\) 很小的转移都是可以考虑转化成多项式或者矩阵然后分治乘解决的。
二维平面应该只有两种办法:一种是扫右端点维护左端点,一种是猫树。
后者直接写出来会发现是两只 \(\log\),但是因为某种原因我们发现答案的下界是 \(2(\max(W,H)+1)\),所以最优矩形一定会跨越 \(x\) 轴中点或者 \(y\) 轴中点。于是猫树只用一层。
(这样用答案下界来限制算法的题目很少见啊)
简要题意:\(Q\) 次操作,每次操作可以加入平面上一个带权 \(w\) 的点 \((x,y)\) 或者查询所有“\(x\) 坐标不为 \(x_0\) 且 \(y\) 坐标不为 \(y_0\) 的点”的点权最大值。\(Q\le 10^6\),值域 \(10^9\),空间 4MB,时限 1s。
想到 KDTree,过不了。想到把平面分成 4 部分递归下去,需要值域线段树,空间 \(\log\),过不了。感觉蠢完了。
尽管是一道很蠢的题,我们还是要记住只保留有用节点的思想。什么是有用节点呢?如果一个节点被别人偏序了,或者被几个人一起偏序了,那它就无用了。
在这道题里,什么是偏序呢?对于若干个点,它们能够覆盖平面上的一个点集。如果一个点自己能覆盖的区域是比它大的点所覆盖的区域的子集,那它就没用了。否则它一定会使得这个覆盖区域的子集缩小。
然后发现这个覆盖区域只有以下几种情况:空集,除去一个十字,除去一行,除去一列,除去两个点,除去一个点,全集。
于是改变次数是 \(O(1)\) 的,有用点的个数也是 \(O(1)\) 的,直接维护即可。空间是 \(O(1)\) 的,时间是线性的。
简要题意:给定正整数序列 \(a\),每次操作可以给 \(a\) 的某个元素 \(+1\),求最小操作次数使得 \(a\) 中所有数异或和为 \(0\)。\(n\le 100\),值域 \(10^9\)。
大体思路:对于序列中一个数,每次加一最后会导致末尾出现一堆 \(0\),而联想到若干个数的异或和 \(\le\) 这些数的和,所以可以结合问题中的“异或”导出有用性质。
简要题意:给定一棵树,每个点对其相邻的点有一个排序,初始每个点的指针指向其第一个元素。接下来从根节点出发,每次走一步,走出去之后将指针循环后移一格。多次询问 \(k\) 步之后到达那个节点。
题目特点:从一个初始状态开始不断操作,多次询问 \(K\) 步之后到达的点。
见到另外一道题,题目特点完全一样。那道题是用平衡树维护所有询问,每次访问到一个节点时把询问往下推。这道题不一样。究其原因大概是那题是 DAG,整体信息难以维护,而这题是树,有更多好的性质吧。
一开始想这道题的时候陷入了之前那道题的思路中,求每个子树内会消耗多少的字典序。但是经过思考发现第几次经过这个点会对其消耗的字典序量产生影响,这就很难做了。
以上的做法应该属于从局部思考,正解是从整体思考。事实上后者会很简单:如果每个点最后指向父亲,那就是走整棵树的欧拉序;现在就是先走前若干个节点的欧拉序,再走更多个节点的欧拉序。最后可以做到线性。
关键应该在于从整体思考问题。
简要题意:给定一棵有根树,每个节点有若干个棋子,双方平等博弈,每步可以选一个节点,将其任意个棋子挪向它的某一个儿子。问谁赢。
解锁技能:阶梯 Nim
阶梯 Nim 的原型就是在一个台阶上玩 Nim 游戏,每次可以将一个台阶上的任意个石子下移一个台阶,移到地上就不能移了。
阶梯 Nim 的结论是等价于拿出所有奇数台阶上的石子玩普通 Nim。证明很简单:偶数阶上的石子可以扔掉,因为对于一个胜者来说,如果对方移了偶数阶的石子,那他可以立即将这些石子再移回偶数阶(注意,这里就是奇数阶和偶数阶不对称的地方,因为 \(0\) 是偶数),从而保持胜局,所以只考虑奇数阶上的石子,就是普通的 Nim 了。
知道这个结论之后这题就是板子了。给每个奇深度的叶子节点多挂一个叶子之后就是树上的阶梯 Nim,直接取出奇深度的异或起来即可。
博弈论的主要三条思路变成了四条:SG 函数,决策覆盖,朴素决策,保持胜局(或决策抵消)。保持胜局的意思就是已经赢了的人可以消除掉不必要的影响因素。注意到在公平游戏里面不管谁赢了都会去消掉它,那这个影响因素就等于不存在了。
可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP的更多相关文章
- [COGS257]动态排名系统 树状数组套主席树
257. 动态排名系统 时间限制:5 s 内存限制:512 MB [问题描述]给定一个长度为N的已知序列A[i](1<=i<=N),要求维护这个序列,能够支持以下两种操作:1.查询A[ ...
- BZOJ 2141 排队(树状数组套主席树)
解法很多的题,可以块套树状数组,可以线段树套平衡树.我用的是树状数组套主席树. 题意:给出一段数列,m次操作,每次操作是交换两个位置的数,求每次操作后的逆序对数.(n,m<=2e4). 对于没有 ...
- Codeforces Round #404 (Div. 2) E. Anton and Permutation(树状数组套主席树 求出指定数的排名)
E. Anton and Permutation time limit per test 4 seconds memory limit per test 512 megabytes input sta ...
- [BZOJ3932] [CQOI2015]任务查询系统(主席树 || 树状数组 套 主席树 + 差分 + 离散化)
传送门 看到这个题有个很暴力的想法, 可以每一个时间点都建一颗主席树,主席树上叶子节点 i 表示优先级为 i 的任务有多少个. 当 x 到 y 有个优先级为 k 的任务时,循环 x 到 y 的每个点, ...
- LUOGU P2617 Dynamic Rankings(树状数组套主席树)
传送门 解题思路 动态区间第\(k\)大,树状数组套主席树模板.树状数组的每个位置的意思的是每棵主席树的根,维护的是一个前缀和.然后询问的时候\(log\)个点一起做前缀和,一起移动.时空复杂度\(O ...
- BZOJ 3196 Tyvj 1730 二逼平衡树 ——树状数组套主席树
[题目分析] 听说是树套树.(雾) 怒写树状数组套主席树,然后就Rank1了.23333 单点修改,区间查询+k大数查询=树状数组套主席树. [代码] #include <cstdio> ...
- BZOJ 1901 Zju2112 Dynamic Rankings ——树状数组套主席树
[题目分析] BZOJ这个题目抄的挺霸气. 主席树是第一时间想到的,但是修改又很麻烦. 看了别人的题解,原来还是可以用均摊的思想,用树状数组套主席树. 学到了新的姿势,2333o(* ̄▽ ̄*)ブ [代 ...
- BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树
BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...
- ZOJ 2112 Dynamic Rankings(树状数组套主席树 可修改区间第k小)题解
题意:求区间第k小,节点可修改 思路:如果直接用静态第k小去做,显然我更改一个节点后,后面的树都要改,这个复杂度太高.那么我们想到树状数组思路,树状数组是求前缀和,那么我们可以用树状数组套主席树,求出 ...
- P2617 Dynamic Rankings(树状数组套主席树)
P2617 Dynamic Rankings 单点修改,区间查询第k大 当然是无脑树套树了~ 树状数组套主席树就好辣 #include<iostream> #include<cstd ...
随机推荐
- Python pickle 二进制序列化和反序列化 - 数据持久化
模块 pickle 实现了对一个 Python 对象结构的二进制序列化和反序列化. "pickling" 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程,而 & ...
- 流媒体传输协议之 RTMP
作者:逸殊 审核:泰一 简介 RTMP 在可靠流式传输(TCP)的基础上提供了双向的消息多路复用服务,在通讯双方之间传输与时间相关的并行流数据,如音频,视频和数据消息.协议实现方通常为不同的消息类型指 ...
- CF(codeforces)如何保持紫名及以上?
虽然我还是连绿名都没,但还是想学习大牛们的学习方法,加油尽早上分. 转自知乎 之前在 CF 上看到一条不错的评论 https://codeforces.com/blog/entry/66715?#co ...
- 自主创新国产化科技:智能制造之 SMT 产线监控管理可视化
SMT(Surface Mounted Technology,表面贴片技术)指的是在印刷电路板 (Printed Circuit Board,PCB)基础上进行加工的系列工艺流程的简称,是电子组装行业 ...
- 12、SpringBoot-mybatis-plus-ehcache
系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...
- <vue 组件 4、插槽的使用>
代码结构 一. 01-slot-插槽的基本使用 1. 效果 同样的一个插槽,父组件调用的时候不同展现的内容就不同 2.代码 01-slot-插槽的基本使用.html <!DOCTYPE ...
- vue2.x封装svg组件并使用
https://blog.csdn.net/ChickenBro_/article/details/134027803
- 2023全国大学生电子设计竞赛H题全解 [原创www.cnblogs.com/helesheng]
2023年又是全国大学生电子设计竞赛年,一如既往的指导学生死磕H题.8月2日看到公布的赛题,我自己还沾沾自喜,觉得今年学生用嵌入式系统和数字信号处理知识就可以完成这题,赛前都辅导过,应该成绩不差.哪想 ...
- java进阶(4)--抽象类与接口的区别
1.抽象类是半抽象的,接口是全抽象的 2.抽象类中有构造方法,接口中没有构造方法 3.类与类之间不能多继承,接口与接口之间支持多继承 4.一个类可以同时实现多个接口,一个类只能继承一个抽象 ...
- @Configuration 注解使用及源码解析
本文为博主原创,转载请注明出处: @Configuration 注解对我们来说并不陌生,以javaConfig的方式定义spring IOC容器的配置类使用的就是这个@Configuration. s ...