标签:统计 ast 否则 注意 这不 class 序列 set 线性
https://atcoder.jp/contests/agc037/tasks/agc037_f
https://img.atcoder.jp/agc037/editorial.pdf
我们称一个序列为合法序列当且仅当存一个 \(K\) 使得它是 \((K,L)\) 的
考虑如何判断一个序列 \((A_1,A_2, \cdots , A_N)\) 是否合法, 假如 \(N=1\) , 那么它是合法的,否则
如果直接这样判断, 我们用set维护元素的位置集合, 那么每次新增加一个元素时需要删除 \(L\) 个元素, 复杂度为 \(O(N \log N)\)
回到原本的问题, 如何统计有多少连续子序列是合法序列, 注意如果 \(Y\) 是 \(X\) 的连续子序列, 那么我们在对 \(Y\) 进行上面的判断步骤时, 中间部分的序列也是 \(X\) 中间部分的子序列, 所以我们对整个序列进行如上的判断, 需要考虑如何计算.
我们将这个问题描述为, 给出 \(L_1, \cdots, L_n, R_1, \cdots, R_n\) , 对于所有合法子序列 \(A_i, \cdots A_j\) 计算 \(L_iR_j\) 的和.
考虑如何确定新的 \(L,R\) , 利用下面的例子感性理解一下
注意我们新加入的区间里的子区间的答案在这一层已经统计过了,需要减去
复杂度 \(O(N \log N)\)
agc037_f Counting of Subarrays
标签:统计 ast 否则 注意 这不 class 序列 set 线性
原文地址:https://www.cnblogs.com/ljzalc1022/p/13191058.html