这是本文档旧的修订版!
2020.07.18 2020牛客暑期多校训练营(第三场)
2020.07.20 2020牛客暑期多校训练营(第四场)
2020牛客暑期多校训练营(第三场)cjy J/K xx H zrx I
Codeforces Round #657 xx F zrx E
2020牛客暑期多校训练营(第四场)cjy E/J xx A zrx I
Codeforces Round #658 xx C zrx D cjy E
本周无
2020.07.18 2020牛客暑期多校训练营(第三场)
2020.07.20 2020牛客暑期多校训练营(第四场)
2020.07.21 cf div1
2020.07.23 2020北航暑期内部训练1
2020牛客暑期多校训练营(第三场)I
Codeforces Round #657 zrx E
2020牛客暑期多校训练营(第四场)I
Codeforces Round #658 D
编辑了AC自动机初稿
编辑了后缀数组初稿
编辑了笛卡尔树初稿
2020.07.19 Codeforces Round #657 (Div. 2)
Codeforces Round #657 zrx E
考虑构造题的时候,可以多考虑特殊种类的树,如毛毛虫,菊花图等,例如本题要求两个孩子深度差最大,毛毛虫显然是一种极优方案。
2020牛客暑期多校第3场H题
题意:
给一个串s,一个排列p,一个数组d。第i次操作为:将$s_{i-1}$的第$p_{i}$位换成$d_{i}$,求$s_{0}$、$s_{1}$、……$s_{n}$的排名。
思路:
对于原串的第i位,假设它是在第k次操作中被改变的,如果:
1. d[k] > s[i] ,那么$s_{k}$,……$s_{n}$排在$s_{0}$……$s_{k-1}$后面
2. d[k] < s[i] ,那么$s_{k}$,……$s_{n}$排在$s_{0}$……$s_{k-1}$前面
3. d[k] > s[i] ,那就当什么都没发生过
所以我们可以从第一位开始考虑,看它是在什么时候被改变的就可以了。但是,我们如何处理才能做到O(n)呢?按照笛卡尔树dfs序!
笛卡尔树的查询操作时O(logn)的,如果是用来在线查找区间最值的话并不占优势,所以以前一直觉得它没什么用。这不就真香了……