这种类型的 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的更多相关文章

  1. [COGS257]动态排名系统 树状数组套主席树

    257. 动态排名系统 时间限制:5 s   内存限制:512 MB [问题描述]给定一个长度为N的已知序列A[i](1<=i<=N),要求维护这个序列,能够支持以下两种操作:1.查询A[ ...

  2. BZOJ 2141 排队(树状数组套主席树)

    解法很多的题,可以块套树状数组,可以线段树套平衡树.我用的是树状数组套主席树. 题意:给出一段数列,m次操作,每次操作是交换两个位置的数,求每次操作后的逆序对数.(n,m<=2e4). 对于没有 ...

  3. 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 ...

  4. [BZOJ3932] [CQOI2015]任务查询系统(主席树 || 树状数组 套 主席树 + 差分 + 离散化)

    传送门 看到这个题有个很暴力的想法, 可以每一个时间点都建一颗主席树,主席树上叶子节点 i 表示优先级为 i 的任务有多少个. 当 x 到 y 有个优先级为 k 的任务时,循环 x 到 y 的每个点, ...

  5. LUOGU P2617 Dynamic Rankings(树状数组套主席树)

    传送门 解题思路 动态区间第\(k\)大,树状数组套主席树模板.树状数组的每个位置的意思的是每棵主席树的根,维护的是一个前缀和.然后询问的时候\(log\)个点一起做前缀和,一起移动.时空复杂度\(O ...

  6. BZOJ 3196 Tyvj 1730 二逼平衡树 ——树状数组套主席树

    [题目分析] 听说是树套树.(雾) 怒写树状数组套主席树,然后就Rank1了.23333 单点修改,区间查询+k大数查询=树状数组套主席树. [代码] #include <cstdio> ...

  7. BZOJ 1901 Zju2112 Dynamic Rankings ——树状数组套主席树

    [题目分析] BZOJ这个题目抄的挺霸气. 主席树是第一时间想到的,但是修改又很麻烦. 看了别人的题解,原来还是可以用均摊的思想,用树状数组套主席树. 学到了新的姿势,2333o(* ̄▽ ̄*)ブ [代 ...

  8. BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树

    BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...

  9. ZOJ 2112 Dynamic Rankings(树状数组套主席树 可修改区间第k小)题解

    题意:求区间第k小,节点可修改 思路:如果直接用静态第k小去做,显然我更改一个节点后,后面的树都要改,这个复杂度太高.那么我们想到树状数组思路,树状数组是求前缀和,那么我们可以用树状数组套主席树,求出 ...

  10. P2617 Dynamic Rankings(树状数组套主席树)

    P2617 Dynamic Rankings 单点修改,区间查询第k大 当然是无脑树套树了~ 树状数组套主席树就好辣 #include<iostream> #include<cstd ...

随机推荐

  1. 基于lio-sam框架,教你如何进行回环检测及位姿计算

    摘要:本篇主要解析lio-sam框架下,是如何进行回环检测及位姿计算的. 本文分享自华为云社区<lio-sam框架:回环检测及位姿计算>,作者:月照银海似蛟龙 . 前言 图优化本身有成形的 ...

  2. 华为中国生态大会2021举行在即,GaussDB将重磅发布5大解决方案

    摘要:企业数字化转型如火如荼,云成为数字化与新基建的关键要素,数据成为智能时代新的生产资料和企业数字化的生命,而数据库则是支撑数据生命线的底座. 本文分享自华为云社区<华为中国生态大会2021举 ...

  3. Docker 启动失败 (code=exited, status=1/FAILURE)错误解决办法

    ob for docker.service failed because the control process exited with error code. See "systemctl ...

  4. kubeadm init port is in use

    前一次 init 时,master ip 写错了,导致init 失败,修改IP后再次执行时,报 kubeadm init 失败,port is in use Last login: Thu Oct 1 ...

  5. C223 生产版本BAPI

    1.事务代码:C223 2.调用函数CM_FV_PROD_VERS_DB_UPDATE "-----------------------------@斌将军----------------- ...

  6. 【计算机网络】soap和rest简单比较整理

    https://www.bilibili.com/video/BV1ht411U7fC/?spm_id_from=333.337.search-card.all.click&vd_source ...

  7. 方法记录 | 文件批量导入Goodnotes

    一般来说通常资料都是用网盘下载了很多文件,想用Goodnotes来写批注,记笔记等,但是由于网盘不能直接分享.也不能批量分享到Goodnotes,给学习带来了很大的麻烦. 当然有钱的大佬们呢直接开了 ...

  8. AtCoder Beginner Contest 178 个人题解(C组合问题 + 快速幂,D规律,E数学公式变形)

    补题链接:Here A - Not Editorial 给出 \(x = 1\) 则输出 0:给出 \(x = 0\) 则输出 1 利用 x ^ 1 可以快速实现 \(x\) 的转换 B - Prod ...

  9. oracle开机自动重启

    数据库服务器如果由于某种原因重启了,oracle数据库是不会重新启动的,那么如何配置可以完成操作系统重启数据库服务器自动重启. 注:如下样例根据我的实际oracle安装路径写的,使用时根据实际安装路径 ...

  10. S3C2440移植linux3.4.2内核之修改分区以及制作根文件系统

    上一节S3C2440移植linux3.4.2内核之内核框架介绍及简单修改我们简单配置了内核,这节来根据继续修改内核. 启动内核   内核启动的打印信息如下图所示   可以看到内核有8个分区,而我们的u ...