![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Acwing 算法提高课 进阶课 基础算法
文章平均质量分 55
Acwing 算法提高课 进阶课 基础算法
ZhgDgE
这个作者很懒,什么都没留下…
展开
-
【提高课】ST表解决区间最值问题【2】
【提高课】ST表解决区间最值问题这是之前写的,现在重新整理了模板,可以返回最小值的下标。ST 表求区间最小值:原创 2022-06-29 15:09:25 · 220 阅读 · 0 评论 -
【目录】提高课 进阶课 基础算法
提高课1.1 建系,坐标转换1.2 修改差分数组的应用1.3 二分1.4 环形纸牌均分问题1.5 对顶堆,对顶栈1.6 ST表解决区间最值问题进阶课2.1 启发式合并2.2 Manacher算法2.3 最小表示法原创 2021-12-07 16:43:29 · 194 阅读 · 0 评论 -
【进阶课】最小表示法
最小表示法简述: 最小表示法可以在线性时间内得到环形序列的所有表示法中字典序最小的表示法(最大表示法也同理)。算法思路:字符串最小表示法 O(n)算法AcWing 158. 项链(最小表示法)算法流程:AcWing 158. 项链AcWing 158 - 项链AC代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1e6 + 10;char a[N],原创 2021-12-07 14:15:33 · 581 阅读 · 0 评论 -
【进阶课】Manacher算法
Manacher算法算法思路: Manacher算法总结变形串的形式:b[0~2n+2] : $(#a[i])#^($#^都不能在原串中出现)一个结论:变形串的最长回文半径减去一,就是原串最长回文长度Acwing 3188 - manacher算法模板题。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e7 + 10;char a[N], b[原创 2021-12-07 14:13:52 · 87 阅读 · 0 评论 -
【进阶课】启发式合并
启发式合并问题概述: 有 nnn 个元素,分成 mmm 个集合。依次操作对 mmm 个集合进行两两合并。算法思想: 每次合并都把小集合中的元素往大集合里放。对每个元素来说,所在集合个数是指数增长的,这样合并的移动次数是 O(logm)O(logm)O(logm) 级别的。对于所有元素,移动次数是 O(nlogm)O(nlogm)O(nlogm) 级别的。博客链接:启发式合并Acwing 2154 - 梦幻布丁i是颜色,p[i]是颜色在序列中的编号。必要时可以交换两个颜色的编号。注意如何更新颜原创 2021-12-07 14:04:13 · 542 阅读 · 0 评论 -
【提高课】ST表解决区间最值问题
一维ST表算法思想:定义 f[i][j]f[i][j]f[i][j] 为从 iii 开始的长度为 2j2^j2j 的区间最值。预处理方程:f[i][j]=max(f[i][j−1],f[i+(1<<j−1)][j−1])f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1])f[i][j]=max(f[i][j−1],f[i+(1<<j−1)][j−1])。询问方程:2k<=len,query(l,r)=max(f[l][k],原创 2021-12-07 14:00:57 · 360 阅读 · 0 评论 -
【提高课】对顶堆,对顶栈
Acwing 106 - 动态中位数题意: 输出动态中位数。题解: AcWing 106. 动态中位数思路:对顶堆:具体思路大致是,开两个堆,一个是大根堆,一个是小根堆,然后小于等于中位数的都放在大根堆,大于等于中位数的都放在小根堆,维护完成之后大根堆堆顶就是动态中位数。具体维护过程:我们要保证大根堆最大值小于等于小根堆最小值,我们可以通过 if(!down.empty() && x <= down.top()) down.push(x); else up.push(x原创 2021-12-07 13:53:20 · 261 阅读 · 0 评论 -
【提高课】环形纸牌均分问题
Acwing 105 - 七夕祭【环形纸牌均分问题】环形纸牌均分问题 的详细思路:AcWing 105. 七夕祭AC代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1e5 + 10;LL row[N], col[N], n, m, t;LL s[N], c[N];LL get(LL * a, LL n){ for(int i=1; i<=原创 2021-12-07 13:49:12 · 154 阅读 · 0 评论 -
【提高课】二分题目
Acwing 102 - 最佳牛围栏【区间最大平均数】题意: 最大区间平均值。思路: 二分答案。判断减去二分值之后是否存在大于0的区间和。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1e5 + 10;double a[N], s[N];int n, f;bool check(double mid){ for(int i=1; i<=n原创 2021-12-07 13:45:49 · 92 阅读 · 0 评论 -
【提高课】修改差分数组的应用
修改差分数组的应用Acwing 100 - 增减序列题意:给定一个长度为 nnn 的数列 a1,a2,…,ana1,a2,…,ana1,a2,…,an,每次可以选择一个区间 [l,r][l,r][l,r],使下标在这个区间内的数都加一或者都减一。求至少操作次数使得数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。分析:对[l,r]区间++时,相当于b[L]++,b[R+1]- -。对b[2]~b[n],每次任意选两个数,一个加上1,另外一个减去1,把b[原创 2021-12-07 13:43:56 · 124 阅读 · 0 评论 -
【提高课】建系,坐标转换
建系,坐标转换Acwing 98 - 分形之城题解:AcWing 98. 分形之城思路: 这道题重点在于坐标的转换。一个等级分成四块,第一块沿着 y=xy=xy=x 对称,第四块沿着 y=−xy=-xy=−x 对称,其余两块平移。四块再自己的基础上要加上偏移量。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;struct point { LL x, y;};double get原创 2021-12-07 13:40:05 · 256 阅读 · 0 评论