随笔分类 -  数据结构

摘要:莫队二次离线,是由数据结构题之神lxl所发明的一种数据结构。因为莫队中 \(ans\) 的变化同样不要求立刻反应,所以我们可以离线求解莫队中每次 \(ans\) 修改值 \(F(x,[l,r])\)。设单次求解修改值的时间复杂度为 \(O(k)\),那么莫队二次离线可以将时间复杂度从 \(O(nk\ 阅读全文
posted @ 2025-07-26 21:08 长安一片月_22 阅读(209) 评论(0) 推荐(1)
摘要:好题当赏! 容易证明:一个点的独特城市一定在从这个点出发的最长链上,而树上距离点 \(i\) 最远的点,一定是树的直径的两个端点之一。 于是,我们找出一条树的直径,并从它的两个端点各做一次 \(dfs\),企图找到最优解。在 \(dfs\) 时,我们默认此时作为根节点的 \(rt\) 距离所有点最远 阅读全文
posted @ 2025-07-02 18:00 长安一片月_22 阅读(7) 评论(0) 推荐(0)
摘要:容易发现题目给出的三大条件(难兄难弟、死神来了、不能复活)都可以用经典 \(2-sat\) 建图解决。假如我们对于每个火星人都拆成 \(T+1\) 份,那点数肯定爆炸,所以考虑对点进行合并,只将在该火星人可能因为外力发生改变或能改变其他火星人生死的时间作为断点(当然,此处不包括不能复活)。 具体连边 阅读全文
posted @ 2025-07-01 09:55 长安一片月_22 阅读(14) 评论(0) 推荐(0)
摘要:好久没有做过这么巧妙的题目了,开心捏O(∩_∩)O~ 由于传送的 \(y,z\) 坐标自选,所以实际上对于一个点给出的坐标 \((a_i,b_i,c_i)\) 以及这个点调查的花费 \(cs_i\),我们只需要维护 \(a_i,cs_i\) 即可。那么设规定的 \(x\) 值为 \(x_0\),那么 阅读全文
posted @ 2025-06-28 11:11 长安一片月_22 阅读(7) 评论(0) 推荐(0)
摘要:好久没有做过这么巧妙的题目了,开心捏O(∩_∩)O~ 由于传送的 \(y,z\) 坐标自选,所以实际上对于一个点给出的坐标 \((a_i,b_i,c_i)\) 以及这个点调查的花费 \(cs_i\),我们只需要维护 \(a_i,cs_i\) 即可。那么设规定的 \(x\) 值为 \(x_0\),那么 阅读全文
posted @ 2025-06-28 11:11 长安一片月_22 阅读(7) 评论(0) 推荐(0)
摘要:我们可以将每一次结束后手中所持有的 \(A,B\) 纪念券的数量为横纵坐标,这样就可以将每一次货币兑换后的结果转化为一个点。根据题目最后的提示,我们可以证明,在每一天中,我们只需要统计当天所能赚到的最多的钱全部转化为纪念券的情况即可。这样我们就可以建立上凸壳,计算每一次的最优解。 由于是动态加点,还 阅读全文
posted @ 2025-06-27 11:04 长安一片月_22 阅读(5) 评论(0) 推荐(0)
摘要:容易发现答案即为重要城市的上凸壳的长度。考虑将正序删点转化为倒序删点,就变成了经典动态加点求凸壳。 对于动态加点求凸壳的问题,我们考虑使用 set 进行维护。因为这样可以较快的找到加入点 \(y\) 在凸壳上的前驱 \(x\) 和后继 \(z\)。我们先判断 \(y\) 是否能加入上凸壳,相当于询问 阅读全文
posted @ 2025-06-26 15:16 长安一片月_22 阅读(9) 评论(0) 推荐(0)
摘要:设加入的第 \(i\) 个向量为 \((a_i,b_i)\),询问的向量是 \((x,y)\),则有(下假设 \(a_i>a_j\)): \[a_ix+b_iy>a_jx+b_jy \]\[-(a_i-a_j)x<(b_i-b_j)y \]\[\begin{cases} \dfrac{b_i-b_j 阅读全文
posted @ 2025-06-26 11:20 长安一片月_22 阅读(12) 评论(0) 推荐(0)
摘要:两个操作相当于区间加等差数列和求区间最大值,过于复杂,考虑分块。 对于每个块,我们记录 \(ad_j\) 表示这个块内每个位置共同的增量,记录 \(cd_j\) 表示这个块内整体加上的等差数列的公差。我们可以通过将部分等差数列的值转移到 \(ad_j\) 中去,这样每个位置的值就是: \[ans_i 阅读全文
posted @ 2025-05-03 09:40 长安一片月_22 阅读(19) 评论(0) 推荐(0)
摘要:这题一脸 01 分数规划的长相,考虑对答案进行二分。 设最大答案为 \(cmax\),则当 \((-x_ic+y_i)+(-p_jc+q_j)\ge 0\) 时,\(c\le cmax\)。不等式左半侧前后两个部分相互独立且解法相近,可以分别处理。我们只考虑 \(-x_ic+y_i\) 的最大值,这 阅读全文
posted @ 2025-04-20 16:02 长安一片月_22 阅读(10) 评论(0) 推荐(0)
摘要:这题一脸 01 分数规划的长相,考虑对答案进行二分。 设最大答案为 \(cmax\),则当 \((-x_ic+y_i)+(-p_jc+q_j)\ge 0\) 时,\(c\le cmax\)。不等式左半侧前后两个部分相互独立且解法相近,可以分别处理。我们只考虑 \(-x_ic+y_i\) 的最大值,这 阅读全文
posted @ 2025-04-20 16:02 长安一片月_22 阅读(10) 评论(0) 推荐(0)
摘要:个人感觉各方面难度高于《在美妙的数学王国中畅游》,也不知道是不是求导的关系,这题 \(luogu\) 难度评级还更低。不过感觉这题作完对 \(LCT\) 理解更顺畅了。 前四个操作简单,关键在第五人格操作。 注意力惊人的注意到我们无法像普通 \(Splay\) 一样,直接对 \(LCT\) 中的 \ 阅读全文
posted @ 2025-01-09 17:14 长安一片月_22 阅读(8) 评论(0) 推荐(0)
摘要:个人感觉各方面难度高于《在美妙的数学王国中畅游》,也不知道是不是求导的关系,这题 \(luogu\) 难度评级还更低。不过感觉这题作完对 \(LCT\) 理解更顺畅了。 前四个操作简单,关键在第五人格操作。 注意力惊人的注意到我们无法像普通 \(Splay\) 一样,直接对 \(LCT\) 中的 \ 阅读全文
posted @ 2025-01-09 17:14 长安一片月_22 阅读(8) 评论(0) 推荐(0)
摘要:事实证明物竞笔记是个好东西,可惜没带,不然还能谎称自己会一点求导和微积分。 顺便在这里把比较经典的一些关于求导的东西记录一下: 常用函数求导: \(C'=0,(x^n)'=nx^{n-1},(\log_ax)'=\frac 1{x\ln a}\) \((\ln x)'=\frac 1x,(a^x)' 阅读全文
posted @ 2025-01-09 09:27 长安一片月_22 阅读(11) 评论(0) 推荐(0)
摘要:\(LCT\) 动态维护树上路径最值,典中典了。 时间复杂度 \(O(n\log n)\)。 #include<bits/stdc++.h> #define fa(x) lct[x].fa #define fl(x) lct[x].fl #define mx(x) lct[x].mx #define 阅读全文
posted @ 2025-01-08 18:24 长安一片月_22 阅读(8) 评论(0) 推荐(0)
摘要:名字感觉挺奇怪的。 考虑离线算法。首先答案就是用 \(n\) 减去连完边后的生成树森林边数。生成树当然就可以用 \(lct\) 求解了。我是不会告诉你这个时候我已经开始想回滚莫队了的。 考虑当我们倒序加入 \([l,r]\) 中的边时,哪些边会产生贡献。我们考虑假如我们新加入一条边,与原先的生成树形 阅读全文
posted @ 2025-01-08 18:21 长安一片月_22 阅读(21) 评论(0) 推荐(0)
摘要:名字感觉挺奇怪的。 考虑离线算法。首先答案就是用 \(n\) 减去连完边后的生成树森林边数。生成树当然就可以用 \(lct\) 求解了。我是不会告诉你这个时候我已经开始想回滚莫队了的。 考虑当我们倒序加入 \([l,r]\) 中的边时,哪些边会产生贡献。我们考虑假如我们新加入一条边,与原先的生成树形 阅读全文
posted @ 2025-01-08 18:21 长安一片月_22 阅读(21) 评论(0) 推荐(0)
摘要:最大值最小的路径肯定在最小生成树上,考虑用 \(LCT\) 维护最小生成树,只需要维护长度最长的边即可实现。由于 \(LCT\) 维护最小生成树不支持删边,所以采用倒序加边的方式处理。 时间复杂度 \(O(n\log n)\)。 #include<bits/stdc++.h> #define fa( 阅读全文
posted @ 2025-01-08 14:37 长安一片月_22 阅读(11) 评论(0) 推荐(0)
摘要:加边删边 \(LCT\),标记下放同 \(luogu\) 线段树 \(2\) 一题。 时间复杂度 \(O(n\log n)\),第一次交的时候我维护 \(sum\) 不维护 \(sz\ WA\) 完了。 #include<bits/stdc++.h> #define int long long #d 阅读全文
posted @ 2025-01-08 10:57 长安一片月_22 阅读(12) 评论(0) 推荐(0)
摘要:一眼树链剖分或 \(LCT\),由于在学后者所以就写了。 取反操作相当于把 \(min,max\) 取反后交换,所以要维护 \(min,max,val\)。 时间复杂度 \(O(m\log n)\)。 #include<bits/stdc++.h> #define fa(x) lct[x].fa # 阅读全文
posted @ 2025-01-06 21:19 长安一片月_22 阅读(17) 评论(0) 推荐(0)