A. chess

想一下合法方案是怎样的。

因为要保证每一个正方形合法,所以新加的一列中棋子个数等于刚刚删去一列的棋子个数。

当$m$很大的情况下,$mod\ n$相同的列转移系数都是相同的。

接着考虑,其实$m\ mod\ n$列转移了$m/n+1$次,而$n-m\ mod \ n$列转移了$m/n$次。

所以将$C$分为两部分,即转移$m/n+1$次的和转移$m/n$次的。

分别做背包就可以了。

 

 

 

B. array

很值得反思的一道题。

刚开始看成了弱智问题,看zkt也马上切了,于是以为确实是弱智题,然后就马上打完交了。

之后T1,T3也很简单,于是以为自己AK了,出去看到别人,各种立flag。

还剩四十多分钟的时候,想打T2对拍,突然发现情况有点不妙。

然而已经心态已经不能支持思考了,只好打了显然的二分部分分。

考试时确实用到了单调栈,但还有一步转化题意没有想到。

问题其实是,每个点到左侧比它大的第一个点范围内,最小的点的位置。

倒序枚举每个元素,维护一个从栈底到栈顶单调递减的栈。

对于栈中每一个元素,维护这个元素到栈中前一个元素范围内的最小值。

当栈顶被弹出时,表明左侧出现了比它更大的点,那么直接用最小值更新答案。

同时弹出栈顶时,栈顶下的元素将成为新的栈顶,那么新栈顶与当前枚举的i之间最小值将可能发生改变,尝试更新。

 

 

 

C. ants

原题没什么好说的,简单回滚莫队。

右指针不断右滚,左指针记录块边界的状态。

对于每个询问单独从块边界向左滚动。

好处是只有添加操作而没有删除。

用一个类似链表的方式维护一下连续区间就可以。