
线段树合并
ylsoi
这个作者很懒,什么都没留下…
展开
-
[bzoj4756][Usaco2017 Jan]Promotion Counting——线段树合并入门
题目大意:n只奶牛构成了一个树形的公司,每个奶牛有一个能力值pi,1号奶牛为树根。 问对于每个奶牛来说,它的子树中有几个能力值比它大的。思路:用权值线段树来查询子树中比它大的结点有多少个。但是权值线段树需要不断地合并。 于是在递归的时候线段树合并就好了。#include<bits/stdc++.h>#define REP(i,a,b) for(int i...原创 2018-08-05 11:14:31 · 250 阅读 · 0 评论 -
[bzoj2212][Poi2011]Tree Rotations——线段树合并+逆序对计算
题目大意:现在有一棵二叉树,所有非叶子节点都有两个孩子。在每个叶子节点上有一个权值(有n个叶子节点,满足这些权值为1..n的一个排列)。可以任意交换每个非叶子节点的左右孩子。 要求进行一系列交换,使得最终所有叶子节点的权值按照遍历序写出来,逆序对个数最少。思路:考虑交换两个相邻两个区间前后的变化,发现变化的只是分别在两个区间之内的逆序对,对外面的逆序对和某一个区间里面的逆序对个数是没...原创 2018-08-05 20:01:55 · 393 阅读 · 0 评论 -
「NOI2018」你的名字——后缀自动机
题目大意:给定一个母串和若干个询问串,求每个询问串有多少个本质不同的子串没有在母串中出现过。思路:ION2017的串我们称为S串,ION2018的串我们称为T串。先考虑68pts怎么去做。考虑T串有多少个子串未在S串中出现过,于是将S建立SAM,然后将T丢进S的SAM里跑子串匹配,这样我们可以得到T的每一个结束位置的最大匹配长度,所有长度大于这个长度的子串都是符合要求的子串。上述方法对...原创 2019-02-20 21:00:09 · 381 阅读 · 0 评论