[ABC253F] Operations on a Matrix Solution

更好的阅读体验戳此进入

题面

存在 nm 列的矩阵,给定 q 次操作,有 3 种格式。

Solution

感觉还算是一道细节不少的题。

首先这道题的做法不少,主流的就是类似二位偏序维护,或者写一个区间修改的主席树。

这里主要说一下用 BIT 维护的方法。

首先不难想到,2 操作会覆盖掉前面所有的对其有影响的 1 操作。然后 1 操作是区间修改列,2 操作是单点推平行。所以考虑离线,然后对于每个查询,令其序号为 r,有行 xy,我们要找到在其之前的上一个推平 x 行,令其的操作序号为 l,那么我们就需要对这个答案初始设为那次推平的值,然后加上 [l,r] 之间的所有的对于 y 列的操作。

思路就是这样,维护的方式还是有些高妙的。先考虑离线一遍,然后维护对于每个查询的上一次对应的推平,同时维护该查询的初始值,然后在需要减去的位置开个 basic_string 插进去需要减的序号。然后我们考虑会有一次区间的查询,用 BIT 和前缀和维护,再遍历一次操作,先将前缀加起来,然后减去的那个前缀就在我们第二次遍历的时候通过遍历对应的 basic_string 而减去。然后最后跑一遍输出答案即可。

Code

UPD

update-2022_12_05 初稿