摘要: 在 NFLS 模拟赛上遇到的,赛后订正过的。 隔了蛮长时间的,总结一下。 - 首先转化为笛卡尔树上后缀前缀的问题。 - 然后考虑如何转移,发现转移形如 $f(x)=\min\{f(x)+C,kx+b\}$ 的形式。 - 可以直接线段树维护每个点的最优直线,在 update 的时候: - 如果 $f( 阅读全文
posted @ 2023-07-14 12:42 A_zjzj 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 发现根节点一定是 $1$,所以考虑两边的子树深度,然后发现只需要考虑一段后缀或前缀的深度即可。 所以循环位移后,可以从中间往两边构建笛卡尔树,实时维护深度即可。 ### 代码 ```cpp #include using namespace std; using ll=long long; const 阅读全文
posted @ 2023-07-14 12:37 A_zjzj 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 太久没见过启发式合并了,然后没想出做法。 首先笛卡尔树建出来。 然后直接枚举跨过 $mid$ 的长度为 $a_{mid}$ 的区间,RMQ $O(1)$ 验证即可。 发现这样的区间个数不超过左右区间大小的较小值,时间复杂度:$O(n\log n)$。 ### 代码 ```cpp #include u 阅读全文
posted @ 2023-07-14 12:15 A_zjzj 阅读(9) 评论(0) 推荐(0) 编辑
摘要: > 随机排列的最长上升子序列长度的期望是 $O(\sqrt{n})$。 这个结论知道最好,不知道也问题不大,赛时随一个跑一下也行。 警告: - 一直考虑正着做,产生了思维定式 - 正难则反啊,反着做发现只需考虑第一次覆盖的数就行了。 - 接下来的贪心也没想到:序列中不应该出现不在 $LIS$ 中的数 阅读全文
posted @ 2023-07-14 11:54 A_zjzj 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 赛时想了很久,可能是比较久没做这样的经典状压枚举子集的 dp 题了。 > 赛时大样例输出是错的,调了 40min 对的代码没看出来哪里错,写个对拍拍不出来,结果是 cxr 题面里的模数写错了,最后改了数据…… - 正难则反,求反面的方案数,即【1,2能到达的点无交集】的方案数 - 设 $f_S$ 表 阅读全文
posted @ 2023-07-14 11:47 A_zjzj 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 思维妙妙题+神仙题。 首先发现 $d$ 的限制满足单调性,所以可以转化为 $l\ge p_r$ 的限制。 > 注意:$p$ 是单调不降的 然后就是 $p_r\le l\le r,\max\limits_{i=l}^r\{c_i\}\le r-l+1$。 这个 $\max$ 想到转化到笛卡尔树上操作。 阅读全文
posted @ 2023-07-14 11:40 A_zjzj 阅读(19) 评论(0) 推荐(0) 编辑