摘要: 树链剖分: fa[ ]父亲节点;son[ ]重儿子节点;siz[ ]以该点为根的子树的大小; id[ ]该点在两次dfs后形成序列中的位置;dep[ ]该点深度; wt[ ]两次dfs后形成的序列;top[ ]该点所在链的链头 1.dfs1先求出每个点的深度,父亲节点和以该点为根的子树的大小,并找到 阅读全文
posted @ 2018-04-20 22:40 lnyzo 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 先读入所有数据,离散一遍 从1-n给每个点建立一颗线段树,若询问区间l-r的第k大,则只要让【第r棵树一段前缀区间内点的个数】-【第l-1棵树一段前缀区间内的点的个数】=k(实际上有可能不是等于,而是大于等于,因为可能存在多个相同的数),该区间最后一个数即为答案 阅读全文
posted @ 2018-04-20 13:44 lnyzo 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 主席树 为什么说本题是福利呢?因为这是一道非常直白的可持久化线段树的练习题,目的并不是虐人,而是指导你入门可持久化数据结构。 线段树有个非常经典的应用是处理RMQ问题,即区间最大/最小值询问问题。现在我们把这个问题可持久化一下: Q k l r 查询数列在第k个版本时,区间[l, r]上的最大值 M 阅读全文
posted @ 2018-04-20 10:57 lnyzo 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 二分在q位置上的数。其他数若大于它,则为1,否则为0,最后若该位上的数为0,则区间右移l,否则左移r check过程中用线段树维护,降序升序可以用区间复制实现 阅读全文
posted @ 2018-04-20 09:40 lnyzo 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 最小费用最大流模板题 思路和网络流的EK算法类似, 1.建正向边,反向边(反向边流量为0,花费为负数:走反向边即取消上次走过后增加的值,因此如此定义) 2.用spfa增广,找到流量大于0且由花费决定的最小dis[ t ],接着回溯,找到能通过的最大流量(minn) 3.ansflow+=minn;a 阅读全文
posted @ 2018-04-20 09:33 lnyzo 阅读(122) 评论(0) 推荐(0) 编辑