Google Kick Start Round H¶
A¶
可以优化到 \(O(n+m)\) ,这里随便打了个暴力。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
B¶
暴力题,不难发现每种颜色是独立的,分别算段数求和就行,\(O(n)\) 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
C¶
思维题,暴力做法 \(O(n^2)\) ,考虑优化。我们考虑加快扫描区间的速度,具体地,可以用 vector 存下每个可能操作的位置,注意到新生成的数最多和左右各产生一个新的位置,总共最多操作 \(n-1\) 次,于是位置数量是 \(O(n)\) 的。用链表优化删除,模拟即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
D¶
一眼动态 dp 题。转移是显然的。但是由于题目不带修改,我们可以使用树上倍增维护,记 \(A_{u,k},B_{u,k}\) 为 \(u\) 往上走 \(2^k\) 步的祖先是否被染色时,\(u\) 被染色的概率。魔改一下 LCA 函数就好了。时间复杂度 \(O((n+q)\log n)\) 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|