1 条题解

  • 0
    @ 2026-9-9 9:23:48

    题解

    思路

    把不含所求三元组的区间称为坏区间。

    做法

    序列值只有 11 到 1010:若区间长度至少为 2121,根据鸽巢原理某个值至少出现三次,这三个相等的值已经组成等差子序列。因此坏区间长度至多为 2020,只需从每个左端点向右检查最多 2020 个元素。

    扩展窗口时维护 seen[v] 表示值 vv 已出现,以及 need[v] 表示此前存在一对下标 i<ji<j 使 2Aj−Ai=v2A_j-A_i=v。加入新值 xx 时,若 need[x] 为真,窗口已经包含等差三元组,后续所有扩展也都是好区间;否则用每个已出现的 yy 产生期待值 2x−y2x-y,再标记 xx 已出现。累计所有仍未变好的短窗口得到坏区间数,用总区间数减去它。

    复杂度

    时间复杂度为 O(10×20×N)O(10\times20\times N),空间复杂度为 O(10)O(10)。

    • 1

    信息

    ID
    1681
    时间
    2000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者