2026/05/15NOI模拟

https://cplusoj.com/d/master/contest/6a058a9cc3e1ba0889c35849

T1 早八(class)

类似猫树,一个区间的贡献挂在其跨过中点的线段树节点上。
那么只需要节点内关心上课的前后缀连续段,我们可以使用二维偏序计算没有贡献的权值和。
主席树维护二维偏序。
复杂度 \(O(n\log ^2 n)\)

当然可以 ODT,1log。

T2 派对(party)

先按照 \(a\) 排序,得到一个 \(b\) 数组。条件转化为:\(b_x\le y\lor b_y\le x\)

考虑一个 \(b\) 的合法条件,分类讨论 \(b_1\)

  • \(b_1=1\):删除后递归。
  • \(b_1=2\):删除后递归,此时我们会让 1 填到后面,他比 2 要小,但是和 2 的效果是一样的。
  • \(b_1=3,b_2=1\):删除后递归,此时 2 会填到后面,性质同上。

于是我们可以设一个 “1” 作为当前可以填的最小值,他不超过 1。
其中 \(b_1=2\) 不会改变 “1”,\(b_1=3\) 会把 “1” 变成 2。
同时根据上述讨论 \(2\) 就是 \(i+1\)\(3\) 就是 \(i+2\),所以 \(b_i\le i+2\)
可以写递推表示所有合法的 \(b\) 的数量:\(f_i=f_{i-1}+[i\ge 2]f_{i-1}+[i\ge 3]f_{i-2}\)

考虑特殊性质,我们要求 “1” 就是 1,这可以使用一维 0/1 去记录。

\(b_i\ge i\) 的情况是比较好处理的。
\(b_i< i\) 可以考虑我们把这个 1 留到后面去。那么中间必须都是第二种操作,\(i\) 前面那个位置可以是第三种转移。
然后注意一下 \(b_i\) 固定的位置 \(i\) 也是可以留到后面的。

然后我们把关键的位置拿出来,中间空的大部分可以矩阵加速计算,复杂度 \(O(Tm2^3\log m)\)

T3 间谍(spy)

结论:给向量先变成 \(x\) 非负,建立凸包(2 倍长向量按照斜率排序造出上/下凸壳,原点在中间),则所有可以造出来的向量在凸包内。
这是 1s 内可以到达的点集,那么 \(T\)s 就是把点集缩放。

可以求出上凸壳和下凸壳下方的点权和,相减即可得到答案。
考虑对于 \(k\) 个斜率分别其下方的点权和,计算所有点到这个斜率的截距,排序后按照 x 轴建立树状数组,离线跑。
复杂度 \(O(k(n+q)\log n)\)

posted @ 2026-05-15 13:41  TallBanana  阅读(24)  评论(0)    收藏  举报