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\)求一个前缀最大值和即可

维护之类的,等我写一下代码吧

posted @ 2022-05-13 18:41  Authentic_k  阅读(119)  评论(0编辑  收藏  举报