1 条题解

  • 0
    @ 2025-9-23 16:43:36

    差分更新示例

    bikb_i\geq k。此时对于前半段的影响不会在 11 的左侧。

    • 定义 l=bik+1l=b_i-k+1,则 alal+1a_l\gets a_l+1
    ll l+1l+1 \ldots bib_i
    原序列 1 1 22 \ldots kk
    一次差分 11 11 11 1-1
    二次差分 11 00 00 2-2

    因此需要更新:

    • clcl+1c_l\gets c_l+1
    • cbi+1cbi+12c_{b_i+1}\gets c_{b_i+1}-2

    bi<kb_i<k。此时对于前半段的影响会在 a1a_1 的左侧产生。

    因此 a1a1+k(bi1)a_1\gets a_1+k-(b_i-1)。例如当 k=5,bi=3k=5,b_i=3 时,a1a1+52=3a_1\gets a_1+5-2=3

    11 22 \ldots bib_i
    原序列 k(bi1)k-(b_i-1) k(bi2)k-(b_i-2) \ldots kk
    一次差分 k(bi1)k-(b_i-1) 11 11 1-1
    二次差分 k(bi1) k-(b_i-1) 1(k(bi1))1-(k-(b_i-1)) 00 2-2

    因此需要更新:

    • c1c1+k(bi1)c_1\gets c_1+k-(b_i-1)
    • c2c2+2kbic_2\gets c_2+2-k-b_i
    • cbi+1cbi+12c_{b_i+1}\gets c_{b_i+1}-2

    bi+kn+1b_i+k\leq n+1。此时对于后半段的影响不会在 nn 的右侧。

    随便举个例子就可以发现,更新的位置就是 cbi+k+1cbi+k+1+1c_{b_i+k+1}\gets c_{b_i+k+1}+1


    bi+k>n+1b_i+k> n+1。此时对于后半段的影响会在 nn 的右侧。但我们只需要维护 a1ana_1\sim a_n 的变化,因此这部分完全不用分析。

    • 1

    信息

    ID
    8835
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者