做题/口胡随机记录

随机记一些感觉比较好的内容……

2024.11.18

CF842E Nikita and game

题意

\(n\) 次操作,每次增加一个叶子节点,求能成为直径端点的叶子数量。

\(n\le 3\times 10^5\)

solution

发现直接维护所有直径难度很大,考虑转化。

trick. 一棵树所有直径的交是一条路径。

我们维护直径的交,每次加入一个点的时候看这个点是更新直径长度/增加答案数量。

2024.11.20

CF1936D Rainbow Rectangles

题意

\(L\times L\) 的 方格图中有 \(n\) 个方格被染上共 \(k\) 种颜色,求有多少个矩形包含所有颜色。

\(L\le 10^9\)\(n,k\le 2\times 10^3\)

solution

思维能将简单的工具组合为精巧的问题。

考虑枚举 \(x\) 的左右边界 \(l,r\),因为随着矩形的增大条件一定仍然满足,因此接下来问题转化为对于每个上边界 \(i\) 求一个距离最小的 \(f_i\) 使得矩形包含所有颜色。

考虑 \(f_i\) 的形式是 \(\max_{v=1}^{k}(\min_{j=1}^{n}y_j[l\le x_j\le r,y_j>i,col_j=v])\)

我们现在如果固定左端点,从小到大枚举右端点的话,\(f_i\) 不断减小,会出现同时维护每种颜色内部取 \(\min\) 和颜色间取 \(\max\) 的情况。

因此我们转换思路,固定左端点的同时从最大的右端点开始枚举,这样所有点就变成了依次删除,\(f_i\) 不降,因此可以直接取 \(\max\)

剩下的部分我们用 set 维护每种颜色内部,删除一个点即用后继的值更新一段区间,这段区间左端点即前驱,右端点可以通过线段树上二分得到。

总复杂度 \(O(n^2\log n)\)

posted @ 2024-11-18 10:20  ふかん  阅读(27)  评论(0)    收藏  举报