PKUSC2021逛街
以下为看完题解之后的口胡过程
首先观察一下操作一,其实可以看成是这个点可以取这个位置后面的一段区间的最大值
据说有一档分是操作一\(l=1,r=n\)
我们设\(poz\)为当前位置,\(a_{poz}\)是目前位置的值,\(end_{poz}\)是这段区间的结束
\(a_{poz}=\max_{i=poz}^{end_{poz}}(a[i])\)
\(end_{poz}=i+Step_1\)
每操作一次,\(end\)的位置就往后移动\(1\)
解释一下就是一个类似合并的过程,我们第一次的操作一取到目前位置和下一位置的最大值,第二次取到下一个位置和下下个位置的最大值(因为目前的下一位置已经和下下位置取最大值了),可手玩一下
那么对于操作一不是\(l=1,r=n\)的
我们现在有序列
\(end_1.....end_n\)
我们对于\([l,r)\)的\(end\)进行修改,\([l,r)\)区间的\(end_i=end_{i+1}\)
解释一下就是,我们可以取到下个位置能延伸的位置这段区间的最大值(用平衡树维护,平常使用的平衡树维护序列一样操作即可)
对于操作二
首先较为显然的\(end_i<=end_{i+1}\),假设\(end_i>end_{i+1}\)那么我们后一个位置都没有取到\(end_{i}\)的值,我们\(i\)是和\(i+1\)取的\(\max,\)那么后面的\(end_{i+1}\)必然比\(end_{i}\)大才能让\(i\)和\(i+1\)取\(\max\)得到
首先设\(c_i=\max_{i=b_{i-1}+1}^{b_i}\)然后对\(c[l+1,r]\)求一个前缀最大值和就好了
那么对于操作一而言,我们对\(c_i\)的影响是
合并\(c_i\)和\(c_{i+1},\)在最后插入一个\(-INF\)
黑色的是\(end,\)绿色的是\(c,\)合并最左边的两个,然后在最后面插入一个\(0\)
然后对于\(c\)求一个前缀最大值和即可
维护之类的,等我写一下代码吧