Codeforces 718C

来源:互联网 发布:java工程师假学历 编辑:程序博客网 时间:2024/05/06 19:21

1. 区间更新&&区间查询 考虑线段树维护 + lazy标记

2. 如果一个区间仅仅维护Sum, l, r的话,是没有办法在更新的时候知道,到底sum要加多少的

3. 考虑到 ai   xi 的上限都是1e9的话 求Fibonacci数 肯定是矩阵快速幂的

同理一个节点 可以维护 Pre 和 Sum 每次更新  乘【0111】^ x 这样一个矩阵 算出新的 Pre 和 Sum 即可

4. TLE9 矩阵开的过大, 光初始化就TLE了

5. TLE16 此时我的lazy标记是一个整型记录的是这段区间内每个数加了多少。

此时我向下更新需要求logn次那个矩阵 复杂度是 nlogn log1e9

显然这人矩阵是可以只求一次的,但更新的时候不仅仅只涉及到这个矩阵,还有lazy的其他矩阵 而且很有可能各不相同,map<ll, Matrix> 优化一下

6. TLE17 显然map的常数还是太大了

将lazy的标记改为一个矩阵,downdate的时候 两个子节点的lazy标记可以直接乘上父节点的,这样的就优化到了常数时间,去掉了那个map



//map<ll, Matrix> 在map.count(1)的时候报错 最后给Matrix加了一个空默认构造函数就行了 不懂为什么

0 0