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

浙公网安备 33010602011771号