刷题
线段树 | 分析 | 链接 |
---|---|---|
2020ICPC 江西省大学生程序设计竞赛 Charging | 二分+排序,树状数组 | 代码 |
P2894 Hotel | 在线段树处理区间覆盖的基础上,增加查询是否有长度为len的空间区间,有则输出其左端点 | 题解 |
2020牛客icpc训练赛E: Early Orders | 线段树 + 堆可以过,但是用单调栈更好 | 线段树版本 |
图和树 | 分析 | 链接 |
---|---|---|
浙江农林大学第二十届程序设计竞赛暨团体程序设计天梯赛选拔赛(同步赛)---- 学霸大帅哥zyh | 树上启发式合并 + 线段树维护,一个颜色假如当前子树有cnt个,那么子树与其补树关于这个颜色的公共数就是min(cnt,total-cnt),total 是这个颜色的总个数,然后就用线段树维护min(cnt,total-cnt)的最大值,以及最大值对应的颜色。之后就用树上启发式合并,先遍历轻儿子,然后是重儿子,因为重儿子是最后遍历的,所以再暴力跑一下非重儿子节点为根的子树,还有当前的根节点,将其信息合并到重儿子上,之后颗子树信息就合并完成了。 轻子树统计完答案后需要原路撤回线段树上的标记,而重子树不用 | 代码 |
ccpc2020长春站 F. Strange Memory | 树上启发式合并 + 异或,一个子树存的信息是f[1e6][22][2],f[i][j][0/1] 表示i这个数在第j位有多少个0,多少个1,然后同样是对于一个节点u的树,他现在只有重子树存放了信息,然后此时就用遍历期轻子树,一遍遍历一遍将信息加入到重儿子,这样就完成了俩俩配对,最后将节点u再加入到重儿子,就成了u子树的信息,查询就是查询当前这个数与lca的异或就是i,然后看f[i][j][0/1] 计算答案 | 代码 |
CF600E. Lomsat gelral | 树上启发式合并,当前子树每个颜色出现的次数以及最大次数mx,答案sum,如果一个颜色次数加1之后是mx,那么sum += 颜色编号,如果加1之后大于mx,那么sum = 颜色编号,轻儿子清空颜色减1,然后mx = 0,sum = 0 | 代码 |
牛客练习赛77E | 无向图求割点的个数,建图优化,把一个局部完全图用增加一个中心点与其他点连边来表示,参考文章:参考 | 代码 |
动态规划 | 分析 | 链接 |
---|---|---|
ACwing.大盗阿福 | 状态机入门1 | 题解 |
Acwing1057. 股票买卖 IV | 状态机入门2 | 题解 |
AcWing 1058. 股票买卖 V | 状态机入门3 | 题解 |
牛客练习赛75E -炒鸡矿工 | 可以用状态机分析 | 代码 |
2020牛客icpc训练赛I:Full Depth Morning Show | 树形换根dp,题解在兰州大学题解pdf上,把公式分成两部分,dfs1算子树贡献和,系数和,dfs2就是换根从上往下 | 代码 |
数学 | 分析 | 链接 |
---|---|---|
2020ICPC 江西省大学生程序设计竞赛-J Split Game | sg函数基本理论的应用,一个局面的sg函数值是mex{所有能由子游戏异或出来的sg函数值} | 代码 |
2020牛客icpc训练赛G: Birthday Paradox | 排列组合题 | – |
牛客小白月赛17 J : 计数 | a[0] = 1000,a[N+1] = 0,对每一个连续段0,两端对差值为len,枚举相对于上一个数递减的位置个数,然后就是组合数选位置,然后这些位置必须把差len给用完,就用隔板法来计算组合数 | 代码 |
未整理 | 分析 | 链接 |
---|---|---|
牛客练习赛75C - 宝石街 | 双指针 | 代码 |
2019EC-final H king | 很好的一道随机化算法,非常值得做 | 代码 |
2019EC-final E flow | 一道贪心题,被伪装成了网络流 | 代码 |
郑州轻工业大学新生防ak题 | 二分选择药水的个数k,然后x + x-1<= k, 就确定了一种药水最多选多少个,x个药水需要x-1个数来隔开它 | 代码 |
工具
工具 | 模板 |
---|---|
线段树 | 线段树区间加&乘 |
平衡树 | 平衡树模板 |
工具库 | pb_ds库 |
资料 | pd_ds中的tree结构体的使用方法 |