MOR-Tales of seafaring
考虑两个节点间路径的奇偶性。把一个点拆成两个点跑bfs,然后一堆if。注意特判起点、终点相同且该点所在连通块大小为1的情况。
LUK-Triumphal arch
先二分 \(k\) ,然后dp, \(dp[u]\) 表示u的所有子树中还需要染色多少个节点,转移: \(dp[u]=\max(\sum dp[v]+son[u]-mid,0)\)
LOG
HOT-Hotels
先枚举根节点。
dfs时,把当前节点的(深度/2)级祖先的当前节点所在子树的贡献++,具体实现就和前向星一起存。然后扫到它的祖先的时候统计答案。不要用std::vector。
TET-Tetris 3D
线段树套线段树,不要用pushdown,使用标记永久化
TET-Tetris Attack
扫一遍,如果该数第一次出现,加到栈中;否则将该数删除,将该数在栈中所在的位置之上的所有元素的rank全部-1,然后计算贡献,用树状数组维护。
KUP-Plot purchase
讨厌单调栈。
对于矩阵中的每个元素 \(x\) ,如果 \(x>2k\) ,就是坏点;如果 \(k\le x\le 2k\) ,直接输出;否则是好点。
然后我们求一个好点组成的最大长方形,使得它不覆盖到任何坏点,显然用单调栈维护。
出来之后,我们逐行考虑,设当前行权值和 \(=y\) ,如果 \(y>2k\) ,在该行中从左到右一个一个删元素,直到符合条件;如果 \(k\le y\le 2k\) ,直接输出;否则删掉这一行。
MAG-Warehouse
旋转45°,把切比雪夫距离转化为曼哈顿距离,x和y的答案区间可以独立地二分求出,然后要保证输出的答案是整数,检查所有的 \((x±1,y±1)\) 。
KUR-Couriers
主席树。查询时如果左半边size大于右半边,往左;否则往右。
OSI-Axes of Symmetry
把多边形变成一个由点的角度(两夹边叉积)和边的长度组成的长为 \(2n\) 的序列,然后跑一遍字符串算法寻找长为 \(n\) 的回文串有多少个。可以使用后缀数组、KMP、manacher、字符串哈希等。
ROZ-Fibonacci Representation
每次寻找最接近答案的斐波那契数。