写一些做题记录,题解和随机话。
这回真是高一零基础学OI/文化课了。
- CF547B
考虑每一个数对答案的贡献。
自然是当这个数 \(a_i\)是所选的区间最小值时对答案有贡献,所以我们找到左边第一个比 \(a_i\) 大的数 \(a_l\) 和右边第一个比 \(a_i\) 大的数 \(b_i\),那么这个以 \(a_i\) 为最小值的区间长度最大是 \(r-1-(l+1)+1=r-l-1\)。
要求每一个长度 \(k\) 的区间的答案,发现一个长度为 \(len\) 的区间的答案同样对 \(k = [1,len-1]\) 的答案有贡献。类似差分的做法,对 \(ans\) 数组的 \(ans[len]\) 与当前答案取 max,然后做一遍后缀 max 即可。
求左/右边第一个比当前数大的数用单调栈来做,然后复杂度是线性的。