1 条题解

  • 0
    @ 2025-10-19 16:18:41

    解法思路

    f(A,B)2f(A,B) \le 2 的情况 当 AABB 都至少有两个元素时,我们可以通过交替放置元素,使得任意连续三个元素都不是单调的,从而稳定性为 22

    f(A,B)3f(A,B) \ge 3 的情况 当某个数组的某个连续子区间本身具有较长的单调段时,无论如何归并,都可能在最终序列中形成较长的单调段。

    问题转化

    我们转而计算 f(A,B)xf(A',B') \ge x 的区间对数量,然后通过差分得到 f(A,B)=xf(A',B') = x 的数量。

    算法步骤

    1.预处理单调段 将数组 AABB 分别划分成极长的单调段(递增或递减),记录每个段的长度 st[i]st[i]

    2.计算贡献 对于每个可能的稳定性值 x3x \ge 3,我们计算有多少对区间 (A,B)(A',B') 满足 f(A,B)xf(A',B') \ge x。这等价于:存在某种归并方式,使得最终序列中有一个长度 x\ge x 的单调连续子段。

    3.核心计算 代码中的 Calc() 函数负责计算一个数组的贡献: 遍历所有可能的段长度 xx 使用并查集合并相邻的短段 通过维护一个滑动窗口和前缀和数组,高效计算满足条件的区间对数 利用组合数学公式计算不同长度单调段的贡献

    4.合并结果 分别对数组 AABB 调用 Calc() 合并两者的贡献 通过差分得到最终的答案数组 特别处理 f=2f = 2 的情况:用总区间对数减去其他所有情况

    复杂度分析

    时间复杂度:O((n+m)log(n+m))O((n+m) \log (n+m))

    空间复杂度:O(n+m)O(n+m)

    算法通过巧妙的数学推导和数据结构优化,避免了暴力枚举所有区间对。

    • 1

    信息

    ID
    3360
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者