懒更新|单点查询

lc1636

带懒标记的区间加法、乘法、单点查询的实现

++全局 add、mul 懒标记代替逐个修改元素++,append 时用费马小定理求逆元还原原值

查询时 O(1) 计算真实值

时间复杂度全操作 O(logMOD)

class Fancy {

static constexpr int MOD = 1'000'000'007;

vector<int> vals;

long long add = 0;

long long mul = 1;

long long pow(long long x, int n) {

long long res = 1;

for (; n; n /= 2) {

if (n % 2) {

res = res * x % MOD;

}

x = x * x % MOD;

}

return res;

}

public:

void append(int val) {

// 注意这里有减法,计算结果可能是负数,+MOD 可以保证计算结果非负

vals.push_back((val - add + MOD) * pow(mul, MOD - 2) % MOD);

}

void addAll(int inc) {

add = (add + inc) % MOD;

}

void multAll(int m) {

mul = mul * m % MOD;

add = add * m % MOD;

}

int getIndex(int idx) {

if (idx >= vals.size()) {

return -1;

}

return (valsidx * mul + add) % MOD;

}

};

相关推荐
叠层归一研究院1 小时前
基于极限自指的叠层归一宇宙结构理论——无元外部封闭系统的内生区分模型
人工智能·经验分享·算法·agi
Selvaggia2 小时前
Diffusion Model 的基本原理与模型架构
算法
wabs6663 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
hanlin033 小时前
刷题笔记:力扣第41题-缺失的第一个正数
笔记·算法·leetcode
shehuiyuelaiyuehao4 小时前
算法50,分治归并,数组中的逆序对
java·算法
阳明山水4 小时前
校准分位数驱动智能库存决策
人工智能·深度学习·算法·机器学习·架构
别动我齐刘海6 小时前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人
zhangfeng11336 小时前
《从“人工适配“到“智能生成“:KernelSwift 跨国产芯片算子迁移全栈方案解读》 —— 强调范式跃迁和跨硬件属性,适合偏架构分析的写法
人工智能·算法·华为·ai编程·npu
0+1116 小时前
算法 --滑动窗口
c++·算法·leetcode
reikocao6 小时前
大场景下 Hessian 特征值放大与退化检测
算法