合集-data_structure

摘要:先致敬 houzhe 学长经典: 我看到我的队友写了个又臭又长的线段树,维护了一堆 tag,于是一脚把他踹下去,写了个线段树维护矩阵,然后就过了。 回到这题,题意即为求一段连续的版本 \([x,y]\) 中,所有版本的区间 \([l,r]\) 的值的平方和。 首先显然可以变成 \([1,y]\) 版 阅读全文
posted @ 2023-12-04 18:16 yinhee 阅读(46) 评论(0) 推荐(0)
摘要:题意:定义 \(f_i\) 为 \(\max\limits_{u\in subtree(i)} dis_{i,u}\)。要求维护 \(\oplus_{v\in s\rightsquigarrow t}f_v\),支持换根。 这题意写得自己大脑萎缩了。 换根?做CF916E就会了。\(f_i\) 怎么 阅读全文
posted @ 2023-12-04 18:14 yinhee 阅读(19) 评论(0) 推荐(0)
摘要:居然自己想出了 AGC E。 首先考虑删边再加红边的本质是什么。容易发现,如果一条目标树上的边当前还没有被加上,且这条边所连两点在原树上的路径被切断,则此时一定无解。因为不管怎么加删边,这都是一棵树,而此时两点路径上一定有红边。 所以,我们就可以得到此时可以新增一条边 \((u,v)\) 的条件:路 阅读全文
posted @ 2023-11-08 22:01 yinhee 阅读(37) 评论(0) 推荐(0)
摘要:首杀问号题,虽然没有问号题的难度,但是至少是自己想出来的。 对于操作一和二,我们直接用分一个数组记录下来,\(O(nq)\)。 对于操作三,我们思考怎么样通过上面记录的信息处理答案。发现对于一个矩形,只要确定了 \(x+y\) 的值,\(x-y\) 的值就是一个区间,因为矩形的约束可以变成 \(2\ 阅读全文
posted @ 2023-11-08 21:57 yinhee 阅读(22) 评论(0) 推荐(0)
摘要:一种更简单的想法,只用用分块思想(或者根号分治?)不用分块。 先考虑暴力怎么做:修改直接改,查询不停跳下一个点。但这样会被卡到 \(O(n^2)\)。 考虑分块思想优化:如果保证每次至少跳 \(\sqrt n\) 的距离,总复杂度就会降到 \(O(n\sqrt n)\)。 于是可以维护每个点开始至少 阅读全文
posted @ 2023-02-07 15:50 yinhee 阅读(38) 评论(2) 推荐(0)
摘要:STL 大法好! 常见套路1:区间没有相同元素->\(\min\limits_{l<=i<=r}(suf_{a_i})>r\) 常见套路2:值域上连续一段->\(\max-min=r-l\) 因为带修,1 的修改可以用 set 维护。为防止爆空间,用个 map 类似离散化。 其他直接线段树。 1: 阅读全文
posted @ 2023-01-31 11:27 yinhee 阅读(44) 评论(0) 推荐(1)
摘要:强制在线是诈骗,还是很有意思的。 首先,如果没有强制在线就是一个 SGT 分治板子。强制在线看起来做不了,但是发现 \(lastans=0/1\)。这启示我们不同的加边可能性不会太多。考虑先记录两种加边可能。 容易发现,如果当前时刻 \(j\) 可能操作 \((u,v)\),上一次可能的时刻是 \( 阅读全文
posted @ 2023-12-23 20:44 yinhee 阅读(18) 评论(0) 推荐(0)
摘要:李超线段树二次离线。 容易发现,将和某个点 \(x\) 相邻的边权翻若干倍后,直径所在位置有两种可能:经过或不经过该点。不经过可以跑一次直接求,否则还要分类讨论一下。 \(\operatorname{deg}_x=1\) 那么它会作为直径的一个端点。 否则 直径会从一条边进,另一条边出。 前者是简单 阅读全文
posted @ 2023-12-23 20:55 yinhee 阅读(29) 评论(0) 推荐(0)
摘要:四维偏序板子题怎么只有一篇 cdq 题解呢/yiw 首先简单介绍一下 cdq 套 cdq 的思路。我们知道 cdq 的递归树可以理解成一棵线段树。cdq 的过程就是递归到叶子,再回溯回来。而 cdq 套 cdq 的过程则可以如此理解: 在第一层递归中到达点 \(x\)。 从 \(x\) 进入第二层递 阅读全文
posted @ 2023-12-23 21:42 yinhee 阅读(31) 评论(0) 推荐(0)
摘要:居然差一点场切了。 首先可以将两棵树上对应的点看作一个点的两个不同状态考虑一个类似最短路的东西:设 \(dis_{i,j,0/1,0/1}\) 为树上 \(0/1\) 状态的 \(i\) 点到 \(0/1\) 状态的最短路。考虑怎样维护这个值。 由于是树上路径问题,容易发现设 \(k\) 为树上 \ 阅读全文
posted @ 2023-12-23 21:45 yinhee 阅读(23) 评论(0) 推荐(0)
摘要:题目传送门 解题思路:倍增+树剖+树状数组 对于每次询问,我们可以看成是两个点都不断往上跳(如果一个点是另一个点的祖先则是只有一个跳),有一个很明显的贪心策略:每次都跳到能跳到的深度最小的点。然而一次一次往上跳可能被极端数据卡掉,所以要用倍增维护跳 \(2^i\) 次能跳到哪里。 然而两个点都跳到他 阅读全文
posted @ 2023-12-23 21:56 yinhee 阅读(38) 评论(0) 推荐(0)
摘要:简单题。想到怎么计数就结束了。 重点就是怎么样计算循环次数。肯定是不能枚举一遍,双指针去数的。 但是发现 \(t\) 有一个很好的性质:它是 \([1,k]\) 内字符的排列。说明每个字符在 \(t\) 中只会出现一次。然后发现,可以按照最长公共子序列那题类似的思路,根据 \(t\) 内字符的位置为 阅读全文
posted @ 2024-01-16 17:02 yinhee 阅读(25) 评论(0) 推荐(0)
摘要:现场做了,离散化数组没开 ll,被卡 au 线 \(\to\) 卡线 ag。 因为代码是半个月前写的了,回忆做法时可能有点偏差,如果发现有误请联系我修改。😃 考虑怎么刻画题目所给条件。发现对于一个区间 \([l,r]\),可以钦定其中一个卡牌 \(i\),使得这张卡牌是第一张无法打出的牌。然后考虑 阅读全文
posted @ 2024-01-21 09:58 yinhee 阅读(37) 评论(0) 推荐(0)
摘要:我不会高妙建树做法。喜提最劣解。差点被卡常,但是过了,赢。 考虑从后往前 dp,\(dp_i\) 为以 \(i\) 开头的路径方案数。考虑一个 \(i\) 能从哪些 \(j\) 转移来。发现 \(j\) 一定是从 \(i\) 开始,除了最后一个点,只经过 \(\le i\) 的点能到达的点。 这个条 阅读全文
posted @ 2024-01-21 10:06 yinhee 阅读(18) 评论(0) 推荐(0)
摘要:简单题。 树上路径相交有个很经典的性质:如果 \((u_1,v_1),(u_2,v_2)\) 相交,则一定在 \(\operatorname{lca}(u_1,v_1),\operatorname{lca}(u_2,v_2)\) 中更深的那个相交。所以只用看两条路径是否除了这个点没有其他交点即可。 阅读全文
posted @ 2024-03-09 10:33 yinhee 阅读(42) 评论(0) 推荐(0)