题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2212 思路:用线段树合并求出交换左右儿子之前之后逆序对的数量,如果数量变小则交换. 实现代码: ...
分类:
其他好文 时间:
2018-08-28 20:09:41
阅读次数:
156
"线段树合并(【POI2011】ROT Tree Rotations)" 题意 现在有一棵二叉树,所有非叶子节点都有两个孩子。在每个叶子节点上有一个权值(有nn个叶子节点,满足这些权值为1…n1…n的一个排列)。可以任意交换每个非叶子节点的左右孩子。 要求进行一系列交换,使得最终所有叶子节点的权值按 ...
分类:
其他好文 时间:
2018-08-24 22:54:03
阅读次数:
188
所谓的启发式合并就是合并的时候把小的东西往大的东西里面一个一个插 这里顺便说一下之前刷过去的线段树合并 对于一个结点,如果两颗线段树都有此位置的结点,则直接合并两结点的信息 然后递归处理左右子树 若只有一个有,直接返回即可 最坏的情况要合并n个结点,然后每个结点合并的时间复杂度是O(logn)的,那 ...
分类:
其他好文 时间:
2018-08-24 20:45:59
阅读次数:
120
一个比较显然的做法:对每棵子树用线段树维护其中的深度,线段树合并即可。 本来想用这个题学一下dsu on tree,结果还是弃疗了。 ...
分类:
其他好文 时间:
2018-08-19 21:58:34
阅读次数:
119
启发式合并 刚听到这个东西的时候,我是相当蒙圈的。特别是“启发式”这三个字莫名的装逼,因此之前一直没有学。 实际上,这个东西就是一个SB贪心。 以堆为例,若我们要合并两个堆a、b,我们有一种极其简单的做法:那就是比较一下它们的大小,将小的堆的每个元素依次插入到大的堆中。不妨设$|a|≤|b|$,则时 ...
分类:
其他好文 时间:
2018-08-16 00:49:47
阅读次数:
200
离线乱搞。。。 也就是一个线段树合并没什么 include include include include using namespace std; int n,m,q,tot,cnt,num,h[100001],a[100001],ans[500001],fa[100001],root[10000 ...
分类:
其他好文 时间:
2018-08-15 16:55:34
阅读次数:
191
1.1 基本数据结构 1. 数组 2. 链表,双向链表 3. 队列,单调队列,双端队列 4. 栈,单调栈 1.2 中级数据结构 1. 堆 2. 并查集与带权并查集 3. hash 表 自然溢出 双hash 1.3 高级数据结构 1. 树状数组 2. 线段树,线段树合并 3. 平衡树 Treap 随机 ...
分类:
编程语言 时间:
2018-08-01 14:33:55
阅读次数:
178
https://codeforces.com/contest/911/problem/G 没想到线段树合并还能这么搞。。 对每个权值建一个线段树(动态开点),如果权值为k的线段树上第i位为1,那么表示a[i]=k;如果权值为k的线段树上第i位为0,表示a[i]≠k 改变权值的时候,就是把[l,r]分 ...
分类:
其他好文 时间:
2018-07-31 15:21:56
阅读次数:
139
给定串S和m个串Ti。Q次询问,每次询问l,r,pl,pr,求S[pl~pr]在Tl~Tr中的哪个串出现次数最多,输出最多次数及其T的下标。若有多个,输出下标最小的。 ...
分类:
其他好文 时间:
2018-07-25 22:02:00
阅读次数:
464
一开始还以为线段树合并是什么高级操作。 学完后发现其实蛮简单的。 线段树合并,就是把两棵线段树的信息整合到一棵线段树上,只要动态开点递归处理就好了,如图: 上面这张图展示的就是把左边两棵线段树合并成右边那棵蓝色线段树的过程,还是很好理解的。 下面就是没有那么伪的线段树合并伪代码: 不难看出,线段树合 ...
分类:
其他好文 时间:
2018-07-25 13:50:57
阅读次数:
164