懒更新|单点查询

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;

}

};

相关推荐
信奥卷王9 小时前
[GESP202609 六级] 分树规划
算法
夏幻灵9 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
徐小黑ACG11 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
Navigator_Z11 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
北极有牛12 小时前
cpp学习笔记--常量指针
java·开发语言·算法
GPU实战笔记12 小时前
云端 GPU 训练的账户余额提醒:它能说明什么,不能说明什么?
深度学习·算法·成本管理·gpu云计算·云端训练
浮链序12 小时前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm
小O的算法实验室12 小时前
IEEE TMC,面向异构物联网的多目标量子行为拓扑优化算法
算法
liliangcsdn13 小时前
派息率指标的应用探索和分析
大数据·算法