随笔分类 -  数据结构--树套树

摘要:题意 略。 分析 容易列出 \(dp\) 方程,然后因为我们子节点是由祖先节点转移,所以这样的情况我们可以考虑出栈序。 出栈序的性质就是对于一个节点来说,其祖先节点的出栈序都在这个节点的后面,于是我们可以考虑dfs序更新,那么所有这个点后面的数都只有它的祖宗才有值,于是就是维护后缀了。 这里维护区间 阅读全文
posted @ 2021-07-19 20:23 __Anchor 阅读(59) 评论(0) 推荐(0)
摘要:题目 P4175 [CTSC2008]网络管理 树上单点修改,查询路径第 k 大。 解答 这道题做法很多,有 树剖+线段树+平衡树+二分 的,也有 树剖+可持久化线段树+树状数组 的,也有 可持久化线段树+差分+树状数组 的,还有就是 整体二分+树剖 的。 复杂度都是几个 \(log\) 的做法。 阅读全文
posted @ 2021-04-23 23:58 __Anchor 阅读(47) 评论(0) 推荐(0)
摘要:P4585 [FJOI2015]火星商店问题 线段树+可持久化01Trie。 首先区间的限制很容易想到线段树,然后异或最大值很明显就是可持久化 01 Trie,于是可以维护,至于 d 天内的限制,我们插入 01Trie 的时候打一个时间 \(tag\) ,询问的时候看一下满不满足就行了。 代码: # 阅读全文
posted @ 2021-04-22 16:21 __Anchor 阅读(104) 评论(0) 推荐(0)
摘要:P1903 [国家集训队]数颜色 / 维护队列 区间数颜色和单点修改。 可以树套树,但是不太会。 也可以考虑带修莫队,相当于就是多维护了一个时间轴。 排序方法变成先按块排序 \(l,r\) ,再按照 \(t\) 来排序即可。 单点修改里的 \(swap\) 很妙。 代码: #include<bits 阅读全文
posted @ 2021-04-21 20:54 __Anchor 阅读(79) 评论(0) 推荐(0)
摘要:CF940F Machine Learning 首先显然可以直接树套树做,在权值线段树上二分即可。 但是这里数据 1e5 并且可以离线,我们可以想到直接莫队/值域分块来做。 那么直接带修莫队暴力维护即可。 代码: #include<bits/stdc++.h> const int M=1e5+5; 阅读全文
posted @ 2021-04-21 19:48 __Anchor 阅读(42) 评论(0) 推荐(0)
摘要:P1975 [国家集训队]排队 P1975 [国家集训队]排队 对于一个长度为 n 的序列进行 k 次操作,每次操作都是交换序列中的某两个数。对于每一个操作,回答当前序列中有多少个逆序对。 树状数组套权值线段树直接维护,考虑每次修改的贡献即可。 view code #include<bits/std 阅读全文
posted @ 2021-04-12 16:32 __Anchor 阅读(100) 评论(0) 推荐(0)
摘要:CF785E Anton and Permutation CF785E Anton and Permutation 显然可以单独考虑每次交换对答案的贡献,然后树套树硬上即可。 树套树代码: view code #include<bits/stdc++.h> using namespace std; 阅读全文
posted @ 2021-04-12 16:24 __Anchor 阅读(182) 评论(0) 推荐(0)