不删序列连续段

不删序列连续段

问题形式

\(1\sim n\)\(n\) 个元素,初始所有元素都非法,每次操作令一个元素合法,对于给定的 \(f:([1,n]\cap\N)\times([1,n]\cap \N)\mapsto S\),和 \(+:S\times S\mapsto S\),设极长合法连续段集为 \(I\),维护 \(\sum_{(l,r)\in I}f(l,r)\),满足信息可差分且有交换律和结合律

求解

  • 维护数组 \(p_{1\sim n}(p_i\in[1,n]\cap \N)\)\(v_{1\sim n}(v_i\in S)\),初始 \(p_i\gets 0\)\(v_i\) 未初始化,信息总和 \(s=\sum_{(l,r)\in I}f(l,r)\) 初始为空
  • 加入位置 \(u\) 时,令 \(p_u=u\)\(v_u=f(u,u)\)
  • \(u>1\)\(p_{u-1}\ne 0\),则将 \([p_{u-1},u-1]\)\([u,u]\) 合并
  • \(u<n\)\(p_{u+1}\ne 0\),则将 \([p_u,u]\)\([u+1,p_{u+1}]\) 合并
  • 其中合并 \([l,M]\)\([M+1,r]\) 时,令 \(p_l\gets r,p_r\gets l,s\gets s-v_l-v_r,v_l\gets f(l,r),s\gets s+v_l\)
  • 此时的答案为 \(s\)

总时间复杂度 \(O(n)\)

posted @ 2025-10-24 08:47  Hstry  阅读(1)  评论(0)    收藏  举报