![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛进阶指南
文章平均质量分 73
Linda_yezi_coder
这个作者很懒,什么都没留下…
展开
-
AcWing 252. 树——点分治
题目链接题目大意给你一棵N个点的树,每条边都有一个权值,树上两个点的路径长度就是路径上的权值之和,问你路径长度不超过K的路径有多少条解题思路这是一棵无根树,我们考虑使用点分治的方法来解决首先,我们任选一个节点作为根节点,这样,符合答案的路径有一下两种情况1、经过这个根节点2、不经过这个根节点我们可以这样考虑,我们每次只算经过根节点的路径,这样我们递归这个根节点的子树,这样我们一直往下递归,可以做到不重不漏地找出所有合法路径假设我们选了一个根节点rootrootroot,我们就需要得到一个数原创 2021-08-02 23:00:02 · 109 阅读 · 0 评论 -
连续子段和最大,连续子段平均数最大
连续子段和最大求一个子段,它的和最大,我们只需要O(n)O(n)O(n)扫一遍这个数列,不断把新的数加入子段,当子段和变为负数时,把当前整个子段清空,边扫描边记录最大值,这样我们就得到了答案int ans = -inf;int sum = 0;for(int i = 1; i <= n; i++){ sum += a[i]; ans = max(ans, sum); if(sum < 0) sum = 0;}连续子段和最大且子段长度不小于L原创 2021-07-30 16:42:51 · 495 阅读 · 0 评论 -
动态开点与线段树合并
权值线段树在一些计数问题中,线段树用于维护值域(一段权值范围),这样的线段树也称为权值线段树。动态开点为了降低空间复杂度,我们可以不建出整棵线段树的结构,而是在最初只建立一个根节点,代表一整个区间,当需要访问线段树的某棵子树时,再建立代表这个子区间的结点。采用这种方法维护的线段树称为动态开点线段树。动态开点线段树抛弃了完全二叉树父子结点二倍的编号原则,改为用变量记录左右子节点编号建立线段树codestruct Tree{ int l, r; int dat;}tree[MAXN原创 2021-07-30 10:42:17 · 172 阅读 · 0 评论 -
博弈论之SG函数
背景介绍给定 nnn 堆物品,第 iii 堆物品有 AiA_iAi 个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但是不能不取。取走最后一件物品者获胜。两个人都采取最优策略,问先手是否能必胜这种游戏叫做NIM博弈,NIM博弈...原创 2021-07-23 16:48:14 · 256 阅读 · 1 评论 -
AcWing 248. 窗内的星星——扫描线算法
题目链接题目大意在一个天空中有很多星星(看作平面直角坐标系),已知每颗星星的坐标和亮度(都是整数)。求用宽为w,高为h(h,w为整数)能圈住星星的亮度总和最大是多少(边界上的星星不算)标题...原创 2021-07-20 10:49:39 · 135 阅读 · 0 评论 -
AcWing 247.亚特兰蒂斯——扫描线算法
原题连接题目大意给你n个矩形,求这n个矩形的面积并解题思路加粗样式原创 2021-07-19 21:51:58 · 223 阅读 · 0 评论 -
AcWing 246. 区间最大公约数
题目链接题目大意给定一个长度为N的数列A,以及M条指令(N<= 5e5, M <= 1e5),每条指令可能是一下两种之一:“C l r d”,表示A[l], A[l+1], …, A[r]都加上d“Q l r”,表示询问A[l], A[l+1], …, A[r]的最大公约数(GCD)对于每个询问,输出一个整数表示答案解题思路两个重要的结论gcd(x, y, z) = gcd(x, y - x, z - y)同理可以推广到任意多个数gcd(a, b) = gcd(a, -b原创 2021-07-14 15:21:32 · 93 阅读 · 0 评论 -
AcWing 245. 你能回答这些问题吗——线段树
题目链接题目大意给你一个长度为N的数列A,以及M条指令(N <= 5e5, M <= 1e5),每条指令可能是以下两种之一:“1 x y”,如果x > y,则交互xy,查询区间[x, y]中最大连续子段和,即maxx ⩽ l ⩽ r ⩽ y{∑i = lrA[i]}max{}_{{}x\ \leqslant \ l\ \leqslant \ r\ \leqslant \ y}\{ \sum^原创 2021-07-14 12:21:03 · 128 阅读 · 0 评论