1 铺瓷砖:
俩类操作, op 1,l,r 在 L,R之间铺一种与之前不同的瓷砖(即所有瓷砖都不相同)
op 2,L,R 查询L,R之间有几种不同的瓷砖
直接利用 区间覆盖无法加工父信息, 如 L1,R1铺,L2,R2铺, 取max不一定可以得到2 ;
只需计算1,R中有几个铺瓷砖的起点, 1,L有多少铺瓷砖的终点,其余的一定会留在L,R中
例2 : 增加等差数列;
op 1 在区间L,R中增加以a 为首项,d为公差的等差数列;
op2 在区间L,R中查询区间和
区间加工为简单的求和操作,
而区间修改需要维护lazy a,和lazy d ,每次下放需要下放这俩个信息即可;
例3: 求区间方差
op1 在区间L,R增加 v;
op 2 在区间L,R查询 方差
思路: 利用 方差为(X1-x平)平方...... X1平方+X2平方....-2*X1*X平-X平平方;
维护平方 和和总和即可
大类: 区间合并
求区间L,R的最长1序列长度
op1 将 L,R全设为1
op2 将L,R全设为0
op3 将L,R反转
op4 求L,R最长1 序列
加工:想要的到父亲的序列信息(只保留最长),那么必须要可合并左右孩子区间,要处理每个区间的前缀和后缀,合并如果这个合并长度是该区间的最长,那么将保留在max1 中,否则这一段将没有意义, 所以max1 存着一个区间的重要信息;
区间重置,只需要将所有信息更改即可,注意一个区间重置需要将其他lazy先置空;
区间反转, 由于任然需要 前缀与后缀,所以需要同时处理前缀后缀0与1;max0与1;
最长L,R交替长度,支持修改操作;
给定初始都是L的数组,支持修改操作
op : idx ;反转操作;
每次反转为给出数组的最长L,R交替长度;
由于加工后的到L,R长度需要区间查询,所以利用线段树维护;
修改为简单的单点修改即可,
加工为父信息需要利用区间合并知识(只需最大值信息);
L,RLRLRLR LRLRLRLR 合并最关键在于中间段;新的最大值应该是左孩子的右L+右孩子的左L长度;然后继续更新前缀L,R后缀L,R;