线段树选做

LOJ6029:

   主要操作为区间除法,考虑到向下取整并且要求区间和

直接标记并对sum进行操作显然是假的

  这里首先是一类线段树问题的套路,基本形式为区间除法

区间开根(听OMA说还有一道题为将区间内所有数转化为其约

数个数),对于这一类问题我们发现并不好维护信息,然而同

一元素收到的操作数十分有限,于是可以暴力进行操作,在线

段树上表示一段区间是否已经不能操作即可

  然而本题还有区间加操作,复杂度并没有保证,貌似需要

大力卡常,考虑另一类经典套路:操作转化,发现操作本质为

将a变为a / div,其中变化量为a - a / div,可以发现类似上面的

思路,对于一段区间若其权值处于一定范围,那么变化量相同

于是可以维护出区间最大最小值,每次操作判断最大值最小值

变化量是否相同,若相同则转化为区间减法操作

CF242E:

   考虑首先我的思路为一个经典结论:a + b = a ^ b + 2 * (a & b)

考虑将其拓展再转化加法与异或的关系,然而并不会拓展。

  于是考虑的是按位操作,发现可以将一段区间的和转化为二进制

下每一位的数量,区间异或即为二进制下某些位的数量反转

  线段树每个节点暴力维护一段区间的二进制位信息即可

CF620E:

   确实很水,考虑60这一关键信息,longlong进行位运算维护

从属关系即可

CF240F:

  考虑字符串统计问题的一种套路,由于字符串一般只有少量字母

即字符集一般为26,那么可以考虑字母分治

  具体来说,对于DP问题可以增加以为表示当前考虑的是字母j,

而本题而言,考虑首先判断区间是否可行,可以想到统计每种字母出

现次数,而构成回文操作实际上是区间推平操作,于是可以利用线段

树维护,考虑在一颗线段树上统计26个字母的信息并不容易实现,因

此开26棵线段树维护每种字母在序列中的出现情况,于是区间查询,

区间赋值即可

posted @ 2021-12-18 18:36  HZOI_LYM  阅读(38)  评论(0编辑  收藏  举报