摘要: 题目大意: 求一个序列的第k大的子串和。 题解: 对于一个右端点找最优的左端点,扔进堆里。 每次取堆顶,将这个右端点可以选择的左端点的区间分成两段,扔进堆里,重复k次。 现在需要对于一个固定的右端点,左端点在一个区间里,求最大值。 可持久化线段树上区间修改,不用标记永久化也可以过。 代码: 阅读全文
posted @ 2018-04-09 16:30 ~Silent 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有一个0/1序列,每次可以询问任意一段的奇偶性,但有代价。 问确定这个序列所花的最小代价。 题解:令sum[i]表示前缀和的奇偶,询问了sum[r]-sum[l-1]的奇偶,已知sum[0]的奇偶,求所有前缀的奇偶。 最小生成树。 代码: 阅读全文
posted @ 2018-04-09 14:19 ~Silent 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 题目大意:求n个数分成k段的最小代价。 题解:DP,没什么好说的。 代码: 阅读全文
posted @ 2018-04-09 11:04 ~Silent 阅读(169) 评论(1) 推荐(1) 编辑
摘要: 题目大意: 求一棵树的最小路径覆盖。 题解: f[x][0/1/2]表示以i为根的子树中i连出了几条边的最小路径覆盖。 代码: 阅读全文
posted @ 2018-04-08 16:09 ~Silent 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定一张网格图,求图上删掉T个障碍物之后能联通的两点的最大欧几里德距离是多少。 题解: 预处理两点间路径经过的最小障碍物数,判断是否小于T,更新答案。 代码: 阅读全文
posted @ 2018-04-08 14:24 ~Silent 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后,位于中间的数。 题解:从中位数向左右扫,小于b减一,大于b加一。让左右两边之和为0就是一个合法的连续子序列,开了个map。 代码: 阅读全文
posted @ 2018-04-07 20:14 ~Silent 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 问树上有多少对点他们的距离小于等于k。 题解:点分治。 代码: 阅读全文
posted @ 2018-04-07 16:47 ~Silent 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求树上所有路径中的前k长路。 题解: 我们把这棵树的点分治序处理出来。假设我们确定了一个分治中心下的一条链,我们需要找到另一条链使得两条加起来最大。 那么另外一条可行链的端点在点分治序上一定形成一段区间。然后就变成了对于一个右端点都有一段可行的左端点,要求两点权值和最大。 之后就变成了B 阅读全文
posted @ 2018-04-07 14:29 ~Silent 阅读(630) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 一个区间的价值为区间内所有数的和。 求序列中长度在L至R的区间中价值前k大的区间的价值和。 题解: 一个区间价值用s[r]-s[l]来表示,s为前缀和。假设固定了右端点,则可以通过st表来确定左端点的最优位置。对于所有的右端点,我们将他们扔进堆里就能找出最大值来。 然后对于一个右端点确定 阅读全文
posted @ 2018-04-07 13:26 ~Silent 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给出一个序列,有几个位置上的数字任意。求最小的逆序对数。 题解: 自己决定放置的数一定是单调不降的。不然把任意两个交换一下就能证明一定会增加逆序对。 然后就可以DP了,f[i][j]表示第i个位置放了j,前i个位置所能产生的最少逆序对数。 用前缀min优化一下就好了。 代码: 阅读全文
posted @ 2018-04-06 17:52 ~Silent 阅读(170) 评论(0) 推荐(0) 编辑
Live2D