上一页 1 2 3 4 5 6 7 8 9 10 ··· 13 下一页
摘要: \(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 阅读(13) 评论(0) 推荐(0)
摘要: 名字感觉挺奇怪的。 考虑离线算法。首先答案就是用 \(n\) 减去连完边后的生成树森林边数。生成树当然就可以用 \(lct\) 求解了。我是不会告诉你这个时候我已经开始想回滚莫队了的。 考虑当我们倒序加入 \([l,r]\) 中的边时,哪些边会产生贡献。我们考虑假如我们新加入一条边,与原先的生成树形 阅读全文
posted @ 2025-01-08 18:21 长安一片月_22 阅读(30) 评论(0) 推荐(0)
摘要: 最大值最小的路径肯定在最小生成树上,考虑用 \(LCT\) 维护最小生成树,只需要维护长度最长的边即可实现。由于 \(LCT\) 维护最小生成树不支持删边,所以采用倒序加边的方式处理。 时间复杂度 \(O(n\log n)\)。 #include<bits/stdc++.h> #define fa( 阅读全文
posted @ 2025-01-08 14:37 长安一片月_22 阅读(15) 评论(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 阅读(21) 评论(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 阅读(27) 评论(0) 推荐(0)
摘要: 似乎所有的线段树分治题都能被 \(LCT\) 平替掉? 一眼动态树,直接 \(LCT\)。 Connect x y 操作用 \(link(x,y)\) 实现,Destroy x y 操作用 \(cut(x,y)\) 实现,Query x y 操作用 \([find(x)=find(y)]\) 实现。 阅读全文
posted @ 2025-01-06 17:40 长安一片月_22 阅读(17) 评论(0) 推荐(0)
摘要: 首先,\(LCT\) 一般指疏松结缔组织。 疏松结缔组织是指一种柔软而富有弹性的结缔组织。主要填充在各器官或组织间的间隙中,如剥制动物标本时,将皮肤拉开,就可见到薄而透明的疏松结缔组织。 对不起,刚才生物同志走错片场了。 \(LCT(Link\ Cut\ Tree)\),是一种可以解决动态树问题的数 阅读全文
posted @ 2025-01-06 17:12 长安一片月_22 阅读(89) 评论(0) 推荐(0)
摘要: 啊啊啊啊啊啊啊啊啊啊啊我终于改完啦啊啊啊啊啊啊啊。 因为没有在最开始的时候将所有点设置为已经重构的,所以直接 \(R15-R70\) 间卡了两三天。 似乎也是我第一次大规模使用指针了。 这道题假如只有一次询问,就是一道简单淀粉质,直接在根节点建立平衡树,记录 \(r_x-dis(x,rt)\),然后 阅读全文
posted @ 2025-01-05 10:12 长安一片月_22 阅读(19) 评论(0) 推荐(0)
该文被密码保护。 阅读全文
posted @ 2025-01-04 08:15 长安一片月_22 阅读(0) 评论(0) 推荐(0)
摘要: 妙不可言!妙绝人寰! 单点修,区间查,包是线段树的。考虑如何比较两节点大小。 考虑二叉搜索树,我们只要再给每个节点附一个权值,就可以比较了! 注意力相当惊人的注意到,假如给每个点一个区间 \([l_x,r_x]\),左右儿子分别表示为 \([l_x,\lfloor\frac{l_x+r_x}2\rf 阅读全文
posted @ 2024-12-30 09:36 长安一片月_22 阅读(13) 评论(0) 推荐(0)
摘要: 突然想买一瓶,然后喝上几口。(不要命的想法) 动态全局 \(k\) 大想到权值线段树上二分。 由于要存储二维的点,所以得用到我们神通广大的 \(KDT\) 了。 那么想到权值线段树套 \(KDT\) 这种算法了。 笔者用的是二进制分组的写法,插入单次均摊时间复杂度是 \(O(\log^3n)\),查 阅读全文
posted @ 2024-12-29 14:58 长安一片月_22 阅读(19) 评论(0) 推荐(0)
摘要: 注:\(K-D\ Tree\) 的应用中由于大量用到了 \(dfs\) 剪枝,所以通常不是正解。但是由于他相当好写,而且通常跑的不慢,所以也广为流传。感觉像是一种半骗分思路。下文简称其为 \(KDT\)。 一、\(K-D\ Tree\) 我们都知道 \(2D,3D\) 表示二维、三维,所以 \(KD 阅读全文
posted @ 2024-12-27 10:29 长安一片月_22 阅读(35) 评论(0) 推荐(0)
摘要: \(55+42+50=147,rk2\)。 T1 序列 直接上吉司机线段树,特判 \(+\ 0\) 情况即可。 我猜测时间复杂度是 \(O(n\log^2n)\)。 #include<bits/stdc++.h> #define int long long using namespace std; 阅读全文
posted @ 2024-12-26 16:30 长安一片月_22 阅读(12) 评论(0) 推荐(0)
摘要: 好题,又学两个思路。 先把问题变简单一点,去掉深度限制,那么有两种做法: 经典的前驱后继转化到二维数点。 颜色相同的点按 \(dfs\) 序排序,每个点 \(+1\),相邻两点 \(lca-1\)。转化为区间求和。 第二种相对实现简单。 假如加上深度,我们可以离线问题,按深度顺序加点。 要在线的话, 阅读全文
posted @ 2024-12-25 12:00 长安一片月_22 阅读(21) 评论(0) 推荐(0)
摘要: 学到新思路了:求解 \(k\) 大值时,可以将所有元素放一块一起跑。 考虑到 \(n,q\) 奇小无匹,我们便可以制造一个 \(O(qn\log V)\) 的代码。 那么对于我们不想在时间复杂度中出现的 \(m\),我们直接把他扔进可持久化 \(Trie\) 中销赃。 再根据刚才那个思路,将 \([ 阅读全文
posted @ 2024-12-24 17:38 长安一片月_22 阅读(18) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 9 10 ··· 13 下一页