当前位置: 首页 > news >正文

线段树板子,懒标记,区间乘法,单点加法,区间求和

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const int MOD = 998244353;struct Node {int l, r;       // 区间左右端点ll sum;         // 区间和ll lazy;        // 乘法懒标记,表示该区间需要乘上的值
};struct SegmentTree {vector<Node> tr;int n;// 构造函数SegmentTree(int size = 0) {init(size);}// 初始化void init(int size) {n = size;tr.resize(n * 4 + 10);build(1, 1, n);}// 上传:用子节点更新父节点void push_up(int p) {tr[p].sum = (tr[p << 1].sum + tr[p << 1 | 1].sum) % MOD;}// 下传懒标记到子节点void push_down(int p) {if (tr[p].lazy == 1) return;  // 懒标记为1,不需要下传ll lz = tr[p].lazy;int lc = p << 1;      // 左子节点int rc = p << 1 | 1;  // 右子节点// 更新左子节点tr[lc].sum = tr[lc].sum * lz % MOD;tr[lc].lazy = tr[lc].lazy * lz % MOD;// 更新右子节点tr[rc].sum = tr[rc].sum * lz % MOD;tr[rc].lazy = tr[rc].lazy * lz % MOD;// 清空当前节点的懒标记tr[p].lazy = 1;}// 建树void build(int p, int l, int r) {tr[p].l = l;tr[p].r = r;tr[p].sum = 0;tr[p].lazy = 1;  // 乘法懒标记初始为1(单位元)if (l == r) return;  // 叶子节点int mid = (l + r) >> 1;build(p << 1, l, mid);       // 建左子树build(p << 1 | 1, mid + 1, r);  // 建右子树}// 单点加:在位置 pos 加上 valvoid add_point(int p, int pos, ll val) {if (tr[p].l == tr[p].r) {// 到达叶子节点tr[p].sum = (tr[p].sum + val) % MOD;return;}push_down(p);  // 下传懒标记int mid = (tr[p].l + tr[p].r) >> 1;if (pos <= mid) add_point(p << 1, pos, val);else add_point(p << 1 | 1, pos, val);push_up(p);  // 上传更新父节点}// 对外接口:单点加void add_point(int pos, ll val) {add_point(1, pos, val);}// 区间乘:将区间 [l, r] 的所有元素乘上 valvoid mul_range(int p, int l, int r, ll val) {if (l <= tr[p].l && tr[p].r <= r) {// 当前区间完全包含在 [l, r] 中tr[p].sum = tr[p].sum * val % MOD;tr[p].lazy = tr[p].lazy * val % MOD;return;}push_down(p);  // 下传懒标记int mid = (tr[p].l + tr[p].r) >> 1;if (l <= mid) mul_range(p << 1, l, r, val);if (r > mid) mul_range(p << 1 | 1, l, r, val);push_up(p);  // 上传更新父节点}// 对外接口:区间乘void mul_range(int l, int r, ll val) {if (l > r) return;mul_range(1, l, r, val);}// 区间查询:查询区间 [l, r] 的和ll query(int p, int l, int r) {if (l <= tr[p].l && tr[p].r <= r) {// 当前区间完全包含在 [l, r] 中return tr[p].sum;}push_down(p);  // 下传懒标记int mid = (tr[p].l + tr[p].r) >> 1;ll res = 0;if (l <= mid) res = (res + query(p << 1, l, r)) % MOD;if (r > mid) res = (res + query(p << 1 | 1, l, r)) % MOD;return res;}// 对外接口:区间查询ll query(int l, int r) {if (l > r) return 0;return query(1, l, r);}// 单点查询(特殊情况的区间查询)ll query_point(int pos) {return query(pos, pos);}
};// ==================== 使用示例 ====================int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n = 10;SegmentTree seg(n);  // 建立大小为 n 的线段树// 单点加:在位置 3 加 5seg.add_point(3, 5);// 在位置 5 加 7seg.add_point(5, 7);// 区间查询 [1, 10] 的和cout << "sum[1,10] = " << seg.query(1, 10) << endl;  // 输出 12// 区间乘:将 [5, 10] 的所有元素乘 2seg.mul_range(5, 10, 2);// 再次查询cout << "sum[1,10] = " << seg.query(1, 10) << endl;  // 输出 5 + 14 = 19// 单点查询cout << "point[5] = " << seg.query_point(5) << endl;  // 输出 14return 0;
}
http://www.jsqmd.com/news/603221/

相关文章:

  • Tsuru高可用部署终极指南:构建零单点故障的企业级PaaS平台
  • G-Helper终极指南:如何用免费开源工具完美控制你的华硕游戏本
  • 2026年比较好的苏州私立民办学校参考 - 品牌排行榜
  • ▲基于QLearning算法的无人机自组网AODV稳定路由matlab仿真
  • Qwen3-ASR-0.6B语音识别Android应用开发实战:从零构建离线语音助手
  • 2026最新珠三角大玻璃窗推荐!全国优质大玻璃窗品牌权威榜单发布 - 十大品牌榜
  • 如何快速安装和配置Pop Shell:面向初学者的完整教程
  • 华硕TUF主板装Ubuntu没网?手把手教你搞定Realtek RTL8125 2.5G网卡驱动(附DKMS持久化配置)
  • 告别重复造轮子:用快马一键生成可扩展的高效ibbot开发框架
  • ▲基于FPGA的4FSK调制解调系统verilog实现
  • 如何快速掌握HTML5解析:gumbo-parser与Robot Framework自动化测试完美结合终极指南
  • IndexTTS2 V23版本5分钟快速部署:小白也能轻松搭建情感语音合成系统
  • 终极指南:如何实现gumbo-parser跨编译器开发,统一代码风格与宏定义
  • TypeScript在GNOME扩展开发中的终极优势:Pop Shell代码质量深度解析
  • Android Topeka数据模型设计终极指南:Quiz、Category与Player类深度解析
  • 2026海关事务合规咨询服务哪家好 - 品牌排行榜
  • PotPlayer字幕翻译插件终极指南:5分钟实现外语视频无障碍观看
  • AI的jieba分词原理与多模式应用解析
  • 如何快速集成mzt-biz-log:10分钟完成操作日志系统搭建
  • OpCore-Simplify:如何通过四层架构设计实现OpenCore EFI配置的智能化简化
  • JVM深入浅出(6)--- 类文件结构
  • 如何快速开发Git-Absorb自定义吸收策略:完整指南
  • 2026最新珠三角隔音门窗推荐!全国优质隔音门窗制造商权威榜单 - 十大品牌榜
  • 颠覆级开源模型Wan2.2-TI2V-5B:重新定义AI视频创作
  • Hogan.js模板压缩与优化:5个技巧减少资源占用
  • 玩转OurBMC第二十三期:OurBMC之PCIe接口应用(下)——虚拟网卡实战
  • 广西江马新能源科技有限公司:南宁青秀区公园游船销售价格多少 - LYL仔仔
  • 终极指南:如何用Pandoc为build-linux项目生成专业HTML文档
  • django-social-auth架构解析:深入理解认证管道和工作原理
  • 2026最新长三角阳光房生产厂家推荐!国内优质品牌权威榜单发布 - 十大品牌榜