E. FARM
SUBSTASK 20 PT
可以发现直接暴力时间复杂度为 O(N×M×Q)O(N\times M\times Q)O(N×M×Q),TLE,剪枝(或记忆化搜索)即可。
SUBTASK 45 PT
考虑使用 vector\mathtt{vector}vector,每次查询时查找之前每次操作 111 播下的种子即可。
45 PT CODE
时间复杂度:O(Q2)O(Q^2)O(Q2)
备注:由于一些原因,对于特殊性质 B 依旧可以通过,因此应当正常得分 30 pt。
SUBTASK 10 PT(特殊性质 B 正解)
可以发现每次操作 111 中的 kkk 为 111,因此可以直接在每次查询时直接查询每个 111 操作并删除。
SUBTASK 100 PT
由于存在二维数区间点数问题,我们考虑 K-D Tree 或平衡树。以下为 K-D Tree 解法:
分析 222 种操作的处理:
* 播种操作:将种子信息(坐标 (x,y)(x,y)(x,y) 的成熟时间 ttt 为当前时间加 kkk)插入到 K-D Tree 中。
* 采摘操作:查询矩形区域内所有成熟时间 ≤\le≤ 当前时间的蔬菜,并标记为已采摘。
但是这样的时间复杂度极限下可能达到 O(Q2)O(Q^2)O(Q2),我们考虑剪枝。
* 每个节点存储子树的最小或最大 (x,y)(x,y)(x,y) 坐标和时间信息,用于快速剪枝。
* 使用 lazy tag 表示蔬菜是否已被采摘。
* 在查询时,根据这些信息可以快速跳过不满足条件的子树。
这样我们的时间复杂度为 O(NN)O(N\sqrt N)O(NN ),大约为 8×1078\times10^78×107。
AC CODE
时间复杂度:O(NN)O(N\sqrt N)O(NN )