【学习笔记】杂项
对于本版块:会把不好放进其他模块的独立算法放进来。
cdq 分治
我们考虑二维偏序是怎么处理的。显然我们对第一维排序然后对第二维开树状数组统计。
同样我们尝试把第一维排序,然后尝试进行分治。将当前分治段分成左右两部分,并把这两部分分别处理好。
inline bool cmp1(Node c1,Node c2){ return ((c1.x^c2.x)?c1.x<c2.x:((c1.y^c2.y)?c1.y<c2.y:c1.z<c2.z)); }//第一次排序
我们显然能够发现在分治的小区间处理好后,在当前范围内左区间不会被更改,但是这种结论在有三元组完全相等时无效,所以我们把三元组去重。
然后我们发现左右区间都处理完答案后第一维不重要了,因为我们只用知道 在现在这个区间只剩左区间对右区间的贡献没有被统计了。
然后是不是变成了二维数点。我们类似归并的做法把左右端点排个序。把左右区间按第二维排个序。
inline bool cmp2(Node c1,Node c2){ return ((c1.y^c2.y)?c1.y<c2.y:c1.z<c2.z); }//第二次排序
按照第二维,对左区间加进一个树状数组中,对右区间查询第三维。
注意退出的时候清空树状数组。
考虑把分治的二叉树表示出来,每次都遍历每一整层,每一层长度都是
四维偏序,考虑 cdq 套 cdq 优化 dp。
外面套 cdq 的那一层为了传到里面给每个点设一个
因为是优化 dp,所以 cdq 的顺序是左中右,也就是先 cdq 左边,然后处理这一层的数据,然后 cdq 右边。
因为先处理这一层的数据然后再搞右边,为了使右边仍然有序,要新开一个数组搞。
整体二分
适用于有多次询问,每次询问都可以二分,二分过程都相似。此时我们可以考虑把这些询问一起处理。
具体地,定义函数 solve(al,ar,l,r)
表示现在答案值域在
每次进行函数的时候,因为是二分所以要搞一个 mid 来进行新的转移,然后检查
普通二分的终点是答案值域只剩一个数,在这里体现为
复杂度
挂一个 离线动态区间 k 小值,只要不是强制在线就可以放心写整体二分,复杂度和树套树一样是
反悔贪心
对于部分假贪心的题目,若所有选择带来的消耗一样,那么我们能够处理出来当前选择的东西里面价值最小的那一个,当没有空位选择下一个东西的时候,我们就能够把这个价值最小的物品和当前想要加进来的东西作比较然后扔掉一个。
因为涉及到加入和时刻查询最小价值,所以考虑堆来维护。
01 分数规划
每个物品有两个属性
首先这个东西具有单调性,这个很显然。所以可以考虑二分这个比值是否
拆一下式子就是问能不能有
对于边界的判断,在第二属性为物品个数,即比值为平均值时边界取权值最大最小值。其他情况不知道。
康托展开
对于一个排列
虚树
给你
第一种做法是 按照 dfs 序排序 这
然后对这
首先证明第二次求 lca 时求得的 lca 都已经在此时的
-
按照是否是给出的关键点将
序列的点分成关键点和非关键点。令第二次求 lca 时求得 是 的 lca。 -
若
有祖先后代关系那根本不用证了, 就是深度更浅的那个点,一个点本身肯定在序列里。于是令 不是祖先后代关系。 -
若
均为关键点,根据 dfs 序的排序规则它们在第一次排序时也一定相邻,于是我们在第一次排序时已经将 加入了序列。 -
若
为关键点, 非关键点(反之亦然),则 子树内一定还有至少多于一个关键点,否则 不可能被加入序列。令其子树中 dfs 序最小的点为 。观察到按照 dfs 序排序后一个点的子树一定是直接接在在它后面的一个连续段,所以第一次排序后一定有 相邻,而 并不在 子树内,所以 一定是 的祖先,则 一定就是 。 -
若
均非关键点,注意到按照上一条证明,若 无祖先后代关系,此情况下则 的子树为空,但是 非关键点,于是 根本不可能被加入序列。得到此种情况不会发生。
好的那么注意到我们对新的序列(令长度为
然后感性理解一下这个东西应该是能把所有 lca 搞出来的。
然后因为 dfs 序的性质我们连
观察到求
第二种做法是用 单调栈维护右链,感觉和笛卡尔树差不多的想法?
就是你维护最右边那条链,每次加入一个关键点的时候跟栈顶做一个 lca,如果不是栈顶就弹栈弹到栈顶变成那个 lca 或者是那个 lca 的祖先。在弹出的时候连边即可。
在原树节点数本身较少时可以 暴力建树,先统计含有关键点的不同子树个数标记虚树上节点,然后连接祖先后代关系的两个节点。不过基本用不上就是了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具