题目传送门 思路: 区间合并线段树的题,第一次写,对于一颗子树,无论这个子树怎么交换,都不会对其他子树的逆序对造成影响,所以就直接算逆序对就好。 注意叶子节点是1到n的全排列,所以每个权值都只会出现1次,合并很好写。 注意动态开点,最多n个叶子节点,然后每次查询用到log个子树节点,(这句话似乎有语 ...
分类:
其他好文 时间:
2019-02-23 01:00:25
阅读次数:
215
"题面" 参考:《左偏树的特点及运用——黄河源》 我们将这个数列划为很多个互不相交的区间,每一段区间内的 $b$ 是相等的,即 $b[l[i]]=b[l[i]+1]=...=b[r[i]]=w[i]?$, $l[i],r[i]?$ 为区间 $i?$ 的左右端点 先假设题目时要求b不下降的(比较好讨论 ...
分类:
其他好文 时间:
2019-02-15 22:35:03
阅读次数:
241
Description Description 给定n个开区间,合并他们中的重合者,输出合并后的区间数量。 给定n个开区间,合并他们中的重合者,输出合并后的区间数量。 Input Input 第一行:n(1 <= n <= 1000) 第2至第n+1行:每行两个整数(不会超过int),第i行的两个整 ...
分类:
其他好文 时间:
2019-02-15 01:16:53
阅读次数:
187
"link" 题目大意:给定一个N个点的树,每个点有一个颜色 有M次操作,每次可以修改树某条链所有点变成一个颜色,查询某条链上点的颜色段数 树剖,线段树维护区间合并 我的代码记录的是某个区间左端点颜色、右端点颜色、除了左端点和右端点的颜色段数 需要稍微特殊处理一些情况,详见代码 ...
分类:
其他好文 时间:
2019-02-04 15:22:48
阅读次数:
128
poj3667 #include<cstdio> #include<algorithm> #define lid id << 1 #define rid id << 1 | 1 using namespace std; const int mx = 50010; struct tree{ int l ...
分类:
其他好文 时间:
2019-02-02 23:15:11
阅读次数:
265
这个题题意我大概解释一下,就是一开始一条直线,上面的点全是联通的,有三种操作 1.操作D把从左往右第x个村庄摧毁,然后断开两边的联通。 2.询问Q节点相联通的最长长度 3.把最后破坏的村庄重建。 这个其实也是非常典型的线段树区间合并,正好可以学一下。 我们给线段树的结点赋予5个值,l 区间左端点, ...
分类:
其他好文 时间:
2019-02-01 23:29:49
阅读次数:
187
我们可以假设1的位置在1,并且依次与右边的区间合并。答案最后乘上2^n即可。 那么需要考虑1所在的区间与另一个区间合并时,另一个区间的最小值不能为特殊的。 直接求解很难,考虑容斥,钦定在哪几个位置必定输,容斥出必胜的方案数。 从大到小dp,设f(i,S)表示当前考虑到第i个特殊的数,必输的区间集合为 ...
分类:
其他好文 时间:
2019-01-24 16:26:53
阅读次数:
154
题目链接:传送门 参考文章:传送门 题意:n个数字初始连在一条线上,有三种操作, D x表示x号被摧毁; R 表示恢复剩下的通路 Q表示查询标号为x所在的串的最长长度。 思路:线段树的区间合并。 #include<iostream> #include<cstdio> #include<cstring ...
分类:
其他好文 时间:
2018-12-31 13:08:05
阅读次数:
213
树剖做法: 就是两个dfs+一个线段树 难度的取决基本==线段树的维护难度 所以对有点线段树基础的,树剖也不难做吧 这里操作有二 一:两点间路径染色 线段树的区间赋值操作 二:查询路径段的个数 考虑线段树如何做 我们发现两端区间的合并取决于他们相连接的那两个颜色 比如这张图 他两边区间合并的时候,完 ...
分类:
其他好文 时间:
2018-12-25 22:25:44
阅读次数:
170
首先先减下标转换成求最长不下降子序列(是个套路?见了几次还是不是很懂) 然后对于递增的直接取值就可以了,递减就来个中位数 可以构造出一个这样的算法: 每次插入一个新的区间[i,i],使用a[i],表示当前点最好用自己的值就可以了 和前一个区间比较,如果这个点选用的值较小,进行区间合并,这个区间用它的 ...
分类:
其他好文 时间:
2018-12-21 22:51:58
阅读次数:
261