数据结构篇
数据结构
栈
- 单调栈:模板必会
队列
字符串
- 经典trick:一个字符串中的 "01" 和 "10" 子串个数是否相同只取决于这个字符串开头和结尾的字符是否相同。
二进制转化 - 括号序列
合法的括号序列:令"("=1,")"=-1
1.和为0,左右括号数量相同
2.所有的前缀和大于等于0
6447. 最长的括号匹配
Bracket Counting:结合该性质的状压
字符串哈希:模板题,必会
爪痕,强颜欢笑,并非是爱的某物:循环节很好找,从后往前枚举,然后验证,关键在对比字符串用到哈希,高效判重.
KMP:Nex数组是,前缀和后缀相同的最长长度,但前缀和后缀不能是整个子串本身。
周期:经典题,题解,另:"爪痕,强颜欢笑,并非是爱的某物",也可以使用KMP解决
寻找字符串:考察对KMP字符串nex数组的理解
字典树
其实就是归并前缀建树的操作
AcWing 142. 前缀统计: 与模板相反的,建树末端记录次数+1,统计时枚举所有前缀,总和答案
哈希
- 判重
小红的双排列查询:设定好排列的哈希值,高效判断双排列
AcWing 137. 雪花雪花雪花 : 通过哈希值确认是可能的雪花,再进一步判重 - 异或+哈希: 利用哈希的独特性,结合异或自身等于0的性质,可以高效判重
-小紫的优势博弈
-H. Robin Hood Archery
线段树/树状数组
- 进阶模板:
-
新定义
线段树的应用不仅在于查询区间和,区间最小/大值,还可以其他你需要的值
- 区间gcd
- D. Gifts Order:题解
- 更改区间字符
[蓝桥杯 2022 国 AC] 替换字符/G. Mass Change Queries
- 总结:这种不是像板子一样的使用线段树,而是要思考线段树上,子节点与父节点传递关系,例如lazy的传递,从而高效的利用线段树解题 -
离线/在线处理
这两个算法有时涉及区间反复的修改,查询...
而查询分离线和在线,离线查询可以最后给出全部回答,在线则必须立即给一个回答,两者均有不同的技巧:-
离线
离线有时可利用不同询问中,重复的信息以便高效回答:
例题:- P1972 [SDOI2009] HH的项链
这里给定询问区间,由上述离线查询的核心思想,我们可以询问顺序排序,改成以r值从小到大的排序.由于我们只考虑种类,所以只保留尽可能靠右的不同种类的贝壳,只要在每次查询就能保证答案不重.
类似的题:数对统计
以上两题的详细题解
- P1972 [SDOI2009] HH的项链
-
在线
-
树链剖分
- 相较模板更简单的题:
[ZJOI2008] 树的统计 - 边权化作点权: