最近把模板整理好了,知识点也总结了,然后预案也做了、这几天就好好调整心态,不要太紧张。
下面就是自己整理的
并查集:
朋友圈问题
图的连通性
优化其他算法加速,这个可以尝试
家庭财产问题,亲戚问题
树状数组
最基本的区间查询及单点修改
树状数组的区间修改,使用差分的思想
二维树状数组,这个比较难,有的还可能会和容斥定理结合
树状数组求逆序对:一般想到逆序对可以使用归并排序,但离散化加树状数组是一个更加快捷的方式
树形树状数组,树状数组与树的集合,常见方法为重新编号,并记录新编号节点的管辖区域。在求解子树权值和的时候还是相当实用的。但这个应用需要建边,要用到链式前向星,在比赛中遇到可以直接跳过。
树状数组求指定长度单调子序列,单调队列求逆序对的升级版。需要排除两数相等的情况,同时计算多区间符合数量
更多情况下,树状数组要与其他算法合用(如二分答案、前缀和优化之类的)才能发挥出最大的威力
线段树
最基本的单点更新,单点查询
然后就是区间更新,区间查询
最大区间子段和,最大前缀,最大后缀,最大子段和
二维矩阵的区间问题使用二维线段树,基础模板题可以做
还有区间合并问题数据大的话使用线段树
区间染色问题可以用线段树来维护
扫描线问题
线段树和树状数组不同的是,树状数组只能维护前缀“操作和”(前缀和,前缀积,前缀最大最小),而线段树可以维护区间操作和。
RMQ
区间最大值最小值问题
还有二维的思路和一维一样
RMQ还可以和其他算法结合使用
树的直径问题使用树型DP或者DFS都可以
KMP
寻找最小循环节
寻找循环节的个数
求最长公共子序列
还有各种字符串的匹配
二叉树B是否为二叉树A的子树
后缀数组
单个字符串相关问题,先构造后缀数组,然后求Height数组
可重叠的最长重复子串问题,求Height数组的最大值
不可重叠的最长重复子串问题,熟练掌握Height数组的性质
分段的思想在后缀数组相关问题中很常用
可重叠的 k 次最长重复子串,一般二分来做,只需判断当前段内是否出现k个后缀即可。
重复出现子串计数问题,比较简单的SA题
Ans=∑max(Height[i]−Height[i−1],0)
不相同子串计数问题,就是n−sa[k]+1−height[k]个子串。
字典序第K子串问题,二分找
连续重复子串问题,枚举串S长度k,如果Rank[1]和Rank[k+1]的Height=|L|−k那么当前答案合法。
重复次数最多的连续重复子串问题,枚举子串长度k,看这个长度对应每个位置之间的LCP是否等于k最长能扩到哪里,就是重复出现次数。
一个字符串在所有字符串中出现次数问题
字符串子串重复出现k次问题,SA+线段树维护
字符串不同种连续子串问题,这个应该算是“前缀数组”吧。具体来说就是将字符串翻转后求一边SA,此时所得就是原串的前缀数组。
后缀数组一直是我的噩梦,希望比赛遇不到吧。
字典树
字符串检索问题
词频统计问题
字符串最长公共前缀问题
字符串搜索的前缀匹配问题
作为其他数据结构和算法的辅助结构,如后缀树,AC自动机等
AC自动机
给出L个模式字符串(加总长度为N),以及长度为M大文本,要求从大文本中提取每个模式字符串出现的位置。比KMP的复杂度要低
给你N个模板串和一个文本串,问你这些模板串在文本串中最多出现了多少次
带权值的AC自动机一般要和DP相结合。
现在要你推断一个长度=n的由小写字母构成的字符串S有多少种组成方式,和DP结合
Treap
这个我感觉使用的话就是查询第K大的数,删除,修改等操作其他的用法还没见到
还有区间查询第K大
树链剖分
在一棵树上进行路径的修改、求极值、求和,这个时候应该马上想到树链剖分
树链剖分解决子树问题
树剖+线段树可以维护的是树上的点权区间,如果是边权区间的话就要边转点。
开场先把所有题目大致过一遍,看到熟悉的数据和关键字可以先标记一下
一道题一定要想清楚思路和算法细节后再写,想一想有没有更优的实现方式,特别是边界条件处理的这种。
跟着榜单做题,一道题过的人数就说明了一道题的难易程度,如果一道你认为使用的很难的算法的题目过的人很多,这个时候赶紧转变思路,想想是不是自己考虑复杂了。
看题目数据是否在某个地方会爆long long
根据数据规模推测算法复杂度,比如数据规模1e5,O(n2)肯定超时,想不出O(n)的方法,那就应该考虑O(nlogn)复杂度的算法,通常和二分、倍增、树有关的优化技巧。
对于时间复杂度可能过可能不过的题根据过的人数判断该不该写
出数据!出数据!,根据设计算法时候的条件设计数据,设计边界较大的数据
数组开小可能会超时
注意题目数据范围、时间限制、其他限制条件
数学题可以打表,看输出数据找规律
自己现在的实力根本没到那种去做AC人数只有几个人的题目,不要在那里浪费时间
双开!双开!一定要双开!卡题后马上下机,让出机位,打印代码找bug,两人去做新的题目。
如果同时进行两道题目,三人的话,找bug能力较强的那个人看两题,这样每道题都有两人看,可以商量。
打到后期一道题卡将近两个小时,如果有和这道题过题数差不多的题目立马换题。
感觉思路被卡了,心态不好了赶紧去厕所洗把脸,不在乎这三五分钟
做题时两人思路不同,冷静套路选取最优的那个,不要急,一定要冷静!
不到比赛最后一刻绝不放弃!奇迹总会有的
实在做不出来的题目最后暴力尝试几次
一定要放松,尽力而为就好!!!