数据结构篇
数据结构
栈
- 单调栈:模板必会
Problem E. Connected Components:按a[i]-i升序和i-b[i]升序,维护每个连通块中最小的i-b[i],出栈入栈时注意连通时的条件
小红的区间构造:铺设道路的变形题
队列
字符串
- 经典trick:一个字符串中的 "01" 和 "10" 子串个数是否相同只取决于这个字符串开头和结尾的字符是否相同。
二进制转化 - 括号序列
合法的括号序列:令"("=1,")"=-1
1.和为0,左右括号数量相同
2.所有的前缀和大于等于0
6447. 最长的括号匹配
Bracket Counting:结合该性质的状压
字符串哈希:模板题,必会
爪痕,强颜欢笑,并非是爱的某物:循环节很好找,从后往前枚举,然后验证,关键在对比字符串用到哈希,高效判重.
KMP:Nex数组是,前缀和后缀相同的最长长度,但前缀和后缀不能是整个子串本身。
周期:经典题,题解,另:"爪痕,强颜欢笑,并非是爱的某物",也可以使用KMP解决
寻找字符串:考察对KMP字符串nex数组的理解
E - Shift String : 循环字符串自然想着拆换成链,用KMP直接匹配
字典树
其实就是归并前缀建树的操作
AcWing 142. 前缀统计: 与模板相反的,建树末端记录次数+1,统计时枚举所有前缀,总和答案
E. Choosing The Commander:比较异或之后数大小的本质,就是二进制按位比较,用字典树加入删除,修改,获得答案
哈希
- 判重
小红的双排列查询:设定好排列的哈希值,高效判断双排列
AcWing 137. 雪花雪花雪花 : 通过哈希值确认是可能的雪花,再进一步判重 - 异或+哈希: 利用哈希的独特性,结合异或自身等于0的性质,可以高效判重
-小紫的优势博弈
-H. Robin Hood Archery
线段树/树状数组
- 进阶模板:
-
经典处理
F - Clearance: 记录区间内最小值,若最小值小于查询值,继续分裂区间,同时记录区间内满足条件的值
P1253 扶苏的问题: 双重标记的处理手法,一个覆盖标记,一个加标记,覆盖标记出现,加标记为0 -
新定义
线段树的应用不仅在于查询区间和,区间最小/大值,还可以其他你需要的值-
二小姐的区间查询: 495的因子必然有2个3,1个5,1个11,所以统计区间内每个数包含的因子,可以使得因子数量满足495的基本因子就能构成一个方案,用状压表示每个数所含因子更方便(1011,表示分别含1个3,0个3,1个5,一个11)
-
更改区间字符
[蓝桥杯 2022 国 AC] 替换字符/[G. Mass Change Queries]
(https://codeforces.com/contest/911/problem/G) -
总结:这种不是像板子一样的使用线段树,而是要思考线段树上,子节点与父节点传递关系,例如lazy的传递,从而高效的利用线段树解题
-
离线/在线处理
这两个算法有时涉及区间反复的修改,查询...
而查询分离线和在线,离线查询可以最后给出全部回答,在线则必须立即给一个回答,两者均有不同的技巧:-
离线
离线有时可利用不同询问中,重复的信息以便高效回答:
例题:- P1972 [SDOI2009] HH的项链
这里给定询问区间,由上述离线查询的核心思想,我们可以询问顺序排序,改成以r值从小到大的排序.由于我们只考虑种类,所以只保留尽可能靠右的不同种类的贝壳,只要在每次查询就能保证答案不重.
类似的题:数对统计
以上两题的详细题解
The 2023 ICPC Asia Shenyang Regional Contest (The 2nd Universal Cup. Stage 13: Shenyang):K. Maximum Rating:维护动态前缀和,找到第一个使得负数和为0的前缀和,分别用两个树状数组维护,为了方便维护,同时发现是离线处理,可以离散化,注意对于同一个值可能有多个
- P1972 [SDOI2009] HH的项链
-
在线
-
树链剖分
- 相较模板更简单的题:
[ZJOI2008] 树的统计 - 边权化作点权:

浙公网安备 33010602011771号