最新要闻
- 特斯拉降价后:门店半小时售10台 老车主直呼被损失4万
- 焦点速读:特斯拉降价引海外热议:这是《孙子兵法》!欲消灭传统车企
- 你拿多少?报告称2022年终奖人均2.19万元 一线城市近3万元
- 环球今日讯!果香浓郁!徐福记DODO综合果味棒棒糖 60支19.9元
- 【世界速看料】保护隐私!微信键盘iOS 1.0.2版更新:体积膨胀到237MB
- 全球观天下!联想GeekPro 2023主机首销6199元起:13代i5+RTX 3060
- 【天天快播报】春节前最后一次成品油调价来了!或迎2023年首次降价
- 关注:畅想未来:2023年手机还能怎样进化?
- 对话郑刚:与罗永浩分歧关键不是商业利益
- 最野性的福特SUV!探险者Timberline亮相:超帅黑橙配色
- 33.58万起!比亚迪腾势D9成交付最快破万高端MPV
- 天天通讯!《魔兽世界》国服关闭倒计时!网易向玩家发短信安利《逆水寒》
- 从超前点映到480P投屏 视频平台赚钱只能靠“割韭菜”?
- 环球快消息!程序猿创造的AI虚拟漂亮老婆 被真女友强制“安乐死”了
- 天天热议:液金+水冷压住RTX 40系显卡:机械革命晒新旷世笔记本散热系统
- 特斯拉海外大降价!老外车主气炸请求维权:免费送FSD
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
当前消息!模板-线段树
模板
单点修改的线段树
template // 线段树修改struct lazysegment_tree { std::vector tree; std::vector array; size_t size;#define LCH id * 2#define RCH id * 2 + 1 lazysegment_tree() = default; lazysegment_tree(size_t n, std::vector& a) : tree((n + 1) << 2), array(a), size(n) { build(1, 1, size); } void build(size_t n, std::vector& a) { tree.resize((n + 1) << 2); size = n; array = a; build(1, 1, size); } void build(int id, int l, int r) { if (l == r) { set(tree[id], array[l]); return; } int mid = (l + r) >> 1; build(LCH, l, mid); build(RCH, mid + 1, r); tree[id] = op(tree[LCH], tree[RCH]); } void clear() { std::vector tmp1; std::vector tmp3; tmp1.swap(tree); tmp3.swap(array); size = 0; } void modify(int id, int l, int r, int pos, Tvalue value) { if (pos <= l && r <= pos) { tree[id] = c(tree[id], value); return; } int mid = (l + r) >> 1; if (pos <= mid) modify(LCH, l ,mid, pos, value); if (pos > mid) modify(RCH, mid + 1, r, pos, value); tree[id] = op(tree[LCH], tree[RCH]); } Tvalue query(int id, int l, int r, int pl, int pr) { if (pl <= l && r <= pr) { return tree[id]; } int mid = (l + r) >> 1; if (pr <= mid) return query(LCH, l, mid, pl, pr); else if (pl > mid) return query(RCH, mid + 1, r, pl, pr); return op(query(LCH, l, mid, pl, pr), query(RCH, mid + 1, r, pl, pr)); } template int lower_bound(int id, int l, int r, int pl, int pr, Tvalue d) { if (pl <= l && r <= pr) { int mid = (l + r) >> 1; if (!cmp(tree[id], d)) return -1; else if (l == r) return l; else if (cmp(tree[LCH], d)) return lower_bound(LCH, l, mid, pl, pr, d); else return lower_bound(RCH, mid + 1, r, pl, pr, d); } int mid = (l + r) >> 1, lans = -1, rans = -1; if (pl <= mid) lans = lower_bound(LCH, l, mid, pl, pr, d); if (pr > mid) rans = lower_bound(RCH, mid + 1, r, pl, pr, d); return (lans != -1 ? lans : rans); } void modify(int pos, Tvalue value) { modify(1, 1, size, pos, value); } Tvalue query(int pos) { return query(1, 1, size, pos, pos); } Tvalue query(int left, int right) { return query(1, 1, size, left, right); } template int lower_bound(int left, int right, Tvalue d) { return lower_bound(1, 1, size, left, right, d); }};
初始化
// 区间最大值, 单点赋值using ll = long long;struct tv{ ll max;};void set(tv& a, ll b) { a = { b };}tv op(tv a, tv b) { return { std::max(a.max, b.max) };}tv c(tv a, tv b) { return b;}bool cmp(tv a, tv b) { return a.max >= b.max;}// 或者 lazysegment_tree seg(n, a);lazysegment_tree seg;seg.build(n, a);
模板第一个参数 Avalue
, 为序列 a
的值 类型。第二个参数 Tvalue
, 为 线段树值 的类型。第三个参数void (*set)(Tvalue&, Avalue)
, 为线段树 赋初始值 的函数指针。第四个参数Tvalue (*op)(Tvalue, Tvalue)
, 为线段树 合并两个段 的函数指针。第五个参数Tvalue (*c)(Tvalue, Tvalue)
, 为线段树 单点修改 的函数指针。
可以全局创建,之后通过 build(n, a)
来构造线段树,也可以直接通过构造函数来创建局部变量,参数与 build
相同。
【资料图】
通过 clear
可以清空线段树。
修改
modify(pos, value)
, value
的类型与 线段树值 一致。
查询
返回值为 线段树的值 类型。
query(left, right)
, 区间查询。
query(pos)
, 单点查询。
线段树上二分
lower_bound
, 查找区间中第一个满足条件的下标,不存在得到 -1
。
cmp
为函数指针 bool (*cmp)(Tvalue, Tvalue)
,查找区间中第一个下标 pos
满足 cmp(a[pos], d) == true
。
区间修改线段树
template // 清空标记(标记初值)struct lazysegment_tree { std::vector tree; std::vector lazy; std::vector array; size_t size;#define LCH id * 2#define RCH id * 2 + 1 lazysegment_tree() = default; lazysegment_tree(size_t n, std::vector& a) : tree((n + 1) << 2), lazy((n + 1) << 2, e()), array(a), size(n) { build(1, 1, size); } void build(size_t n, std::vector& a) { tree.resize((n + 1) << 2); lazy.resize((n + 1) << 2, e()); size = n; array = a; build(1, 1, size); } void build(int id, int l, int r) { if (l == r) { set(tree[id], array[l]); return; } int mid = (l + r) >> 1; build(LCH, l, mid); build(RCH, mid + 1, r); tree[id] = op(tree[LCH], tree[RCH]); } void clear() { std::vector tmp1; std::vector tmp2; std::vector tmp3; tmp1.swap(tree); tmp2.swap(lazy); tmp3.swap(array); size = 0; } void pushdown(int id) { if (lazy[id] == e()) return; tag(tree[LCH], lazy[LCH], lazy[id]); tag(tree[RCH], lazy[RCH], lazy[id]); lazy[id] = e(); } void modify(int id, int l, int r, int pl, int pr, Tag value) { if (pl <= l && r <= pr) { tag(tree[id], lazy[id], value); return; } pushdown(id); int mid = (l + r) >> 1; if (pl <= mid) modify(LCH, l ,mid, pl, pr, value); if (pr > mid) modify(RCH, mid + 1, r, pl, pr, value); tree[id] = op(tree[LCH], tree[RCH]); } Tvalue query(int id, int l, int r, int pl, int pr) { if (pl <= l && r <= pr) { return tree[id]; } pushdown(id); int mid = (l + r) >> 1; if (pr <= mid) return query(LCH, l, mid, pl, pr); else if (pl > mid) return query(RCH, mid + 1, r, pl, pr); return op(query(LCH, l, mid, pl, pr), query(RCH, mid + 1, r, pl, pr)); } template int lower_bound(int id, int l, int r, int pl, int pr, Tvalue d) { if (pl <= l && r <= pr) { int mid = (l + r) >> 1; if (!cmp(tree[id], d)) return -1; else if (l == r) return l; pushdown(id); if (cmp(tree[LCH], d)) return lower_bound(LCH, l, mid, pl, pr, d); else return lower_bound(RCH, mid + 1, r, pl, pr, d); } pushdown(id); int mid = (l + r) >> 1, lans = -1, rans = -1; if (pl <= mid) lans = lower_bound(LCH, l, mid, pl, pr, d); if (pr > mid) rans = lower_bound(RCH, mid + 1, r, pl, pr, d); return (lans != -1 ? lans : rans); } void modify(int left, int right, Tag value) { modify(1, 1, size, left, right, value); } Tvalue query(int pos) { return query(1, 1, size, pos, pos); } Tvalue query(int left, int right) { return query(1, 1, size, left, right); } template int lower_bound(int left, int right, Tvalue d) { return lower_bound(1, 1, size, left, right, d); }};
初始化
// 区间和, 区间加using ll = long long;struct tv{ ll sum; int size;};void set(tv& a, ll b) { a = { b, 1 };}tv op(tv a, tv b) { return { a.sum + b.sum, a.size + b.size };}void tag(tv& a, ll& b, ll c) { if (c == 0) return; a.sum += c * a.size; b += c;}ll e() { return 0;}// 或者 lazysegment_tree seg(n, a);lazysegment_tree seg;seg.build(n, a);
模板第一个参数 Avalue
, 为序列 a
的值 类型。第二个参数 Tvalue
, 为 线段树值 的类型。第三个参数 Tag
, 为 标记 的类型。第四个参数void (*set)(Tvalue&, Avalue)
, 为线段树 赋初始值 的函数指针。第五个参数Tvalue (*op)(Tvalue, Tvalue)
, 为线段树 合并两个段 的函数指针。第六个参数void (*tag)(Tvalue&, Tag&, Tag)
, 为线段树 设置标记 的函数指针。第七个参数Tag (*e)()
, 为线段树 标记的初始值 的函数指针。
可以全局创建,之后通过 build(n, a)
来构造线段树,也可以直接通过构造函数来创建局部变量,参数与 build
相同。
通过 clear
可以清空线段树。
修改
modify(left, right, value)
, value
的类型与 标记 一致。
查询
返回值为 线段树的值 类型。
query(left, right)
, 区间查询。
query(pos)
, 单点查询。
线段树上二分
lower_bound
, 查找区间中第一个满足条件的下标,不存在得到 -1
。
cmp
为函数指针 bool (*cmp)(Tvalue, Tvalue)
,查找区间中第一个下标 pos
满足 cmp(a[pos], d) == true
。
其他
P3372 【模板】线段树 1
OI-wiki
-
学习笔记——Spring简介;Spring搭建步骤;Spring的特性;Spring中getBean三种方式;Spring中的标签
2023-01-13一、Spring1、Spring简介(1)Spring是一个为简化企业级开发而生的开源框架。(2)Spring是一...
来源: 当前消息!模板-线段树
全球热点!算法学习笔记(8.1): 网络最大流算法 EK, Dinic, ISAP
学习笔记——Spring简介;Spring搭建步骤;Spring的特性;Spring中getBean三种方式;Spring中的标签
实时:AcWing257 关押罪犯
当前关注:使用vscode调试PHP底层C源码
特斯拉降价后:门店半小时售10台 老车主直呼被损失4万
焦点速读:特斯拉降价引海外热议:这是《孙子兵法》!欲消灭传统车企
你拿多少?报告称2022年终奖人均2.19万元 一线城市近3万元
环球今日讯!果香浓郁!徐福记DODO综合果味棒棒糖 60支19.9元
【世界速看料】保护隐私!微信键盘iOS 1.0.2版更新:体积膨胀到237MB
全球观天下!联想GeekPro 2023主机首销6199元起:13代i5+RTX 3060
【天天快播报】春节前最后一次成品油调价来了!或迎2023年首次降价
关注:畅想未来:2023年手机还能怎样进化?
对话郑刚:与罗永浩分歧关键不是商业利益
最野性的福特SUV!探险者Timberline亮相:超帅黑橙配色
33.58万起!比亚迪腾势D9成交付最快破万高端MPV
天天通讯!《魔兽世界》国服关闭倒计时!网易向玩家发短信安利《逆水寒》
从超前点映到480P投屏 视频平台赚钱只能靠“割韭菜”?
环球快消息!程序猿创造的AI虚拟漂亮老婆 被真女友强制“安乐死”了
天天热议:液金+水冷压住RTX 40系显卡:机械革命晒新旷世笔记本散热系统
特斯拉海外大降价!老外车主气炸请求维权:免费送FSD
环球关注:4K缩水到480p 爱奇艺称“有权变更内容” 律师回应称肯定违约了
环球讯息:《流浪地球2》发行通知公开:片长173分钟对标《阿凡达2》
时讯:网友铁了心要等一加11 Pro 李杰:没有11 Pro、11 Ultra
遭黑客广泛利用:微软无奈计划淘汰诊断工具MSDT
你涨工资没?全国招聘平均月薪增幅最高城市 最低1.2万、还在加薪
世界微速讯:曾两个月涨粉上千万!张同学回应热度消退:可以坦然面对
视点!小米6钉子户换上Redmi K50至尊版:速度就是快
马斯克突然调整Twitter API:第三方客户端全灭
不再是小仪表盘 新款比亚迪秦PLUS DM-i曝光:续航猛增至1310km
热点聚焦:燃油版“宏光MINIEV”!三菱Delica Mini首发:配0.66L发动机
【环球快播报】“蓝兔”邮票黄永玉有多潇洒?北京第一辆私家车拥有者 93岁开法拉利飙车
每日信息:三星将长焦发挥到极致!曝Galaxy S24 Ultra支持150倍变焦
快资讯:iPhone 14兔年限量保护套售价398元贵吗?部分型号卖断货
TP-LINK发布新款AX3000双频千兆Wi-Fi 6光口AP:支持DC、PoE双供电
世界微速讯:长白山人参旗舰店:全须生晒参4盒99元狂促(300元大额券)
播报:联想拯救者刃7000K 2023今日开售:i5-13400F+RTX3060 首发7199元
焦点热议:豆瓣9.5高分国漫!《中国奇谭》第二季已在筹备:要打造IP宇宙
最新快讯!二十六位朗读主播!讯飞有声书图赏
当前热讯:“1888万彩礼”事件作者承认编故事 知乎:永久封禁账号
热资讯!奇葩公司发大鹅当年货 员工开心又无奈:放公司很吵
天天微速讯:故意排放能怎样?日本决定核废水2023春夏排入海 多国网友愤怒
2022年动力电池装车量排名:“宁迪”双王吃下超7成市场
每日关注!73岁保安徒手接住4楼坠落女子获奖 网友:见义勇为、值得点赞
HarmonyOS智能座舱是怎样炼成的?华为官方揭秘软件开发标准
全球讯息:大手笔!蔚来官宣:春节高速路换电全免费、不限次数
今日最新!(六)elasticsearch 源码之选主流程分析
环球今日讯!java中关于继承,多态及方法调用的底层细节
如何构建基于 DDD 领域驱动的微服务?
世界新资讯:火山引擎 DataTester:一次 A/B 测试,帮助产品分享率提升超 20%
珠江的源头在哪里?珠江的长度是多少千米?
当前热文:被称作“电费刺客” 商家:踢脚线取暖器耗电量可达空调3倍
蜀国的皇帝有哪些?蜀国的皇帝列表排名
当前视点!明晚8点开播!央视网络春晚第二波阵容官宣:王心凌、撒贝宁等加盟
魔兽国服关闭当天 老外喜迎新版本升级 网友:暴雪杀人诛心
豆瓣9.2分神作!《新·福音战士剧场版:终》终于官宣引进
天天时讯:2023年电脑城奸商依然猖狂:3千元笔记本卖5千 出库不能退
为黛西小姐开车故事背景是什么?为黛西小姐开车故事梗概是什么?
打电动是什么意思?打电动是什么游戏?
特百惠是哪国的牌子?特百惠卖什么产品?
电视机顶盒怎么连接电视机?电视机顶盒怎么破解?
怎么给冰箱加氟?冰箱加氟一般需要多少钱?
excel怎么转化为在线表格?excel怎么转化为PDF?
lol怎么亮徽章?lol徽章有什么用?
斗鱼鱼丸多少钱一个?斗鱼鱼丸怎么兑换人民币?
用SGDK开发世嘉MD游戏:入门篇
快资讯:FAA飞航系统已有30年历史 老迈程度堪比N64
环球百事通!90后女孩神还原蔡明春晚40年造型火了 本尊回应5个字
焦点观察:果粉愿望要实现!iPhone 16 Pro直接256GB存储起步
环球快消息!12月轿车销量排名出炉:传统“豪强”反攻、比亚迪也挡不住?
世界观点:超大范围降雪来袭:全国多地上百条高速局部路段公路封闭
最新:误将磁盘格式化的应急响应
头条:【Python爬虫项目实战】Python爬虫豆瓣Top250电影短评数据保存本地
2023最新nacos的windows 10安装(保姆级)
滚动:我国让科幻片成了现实!全球首艘智能型无人系统科考母船交付使用
世界热点评!6英寸墨水屏带来全新听书体验!讯飞有声书评测:内置26种朗读主播 方言英语都能读
全球观速讯丨微软经典Media Player获新生:新版本面向全部Win10用户推出
焦点快看:读编程与类型系统笔记06_函数类型的高级应用
全球热消息:NVIDIA发布GeForce 527.37驱动 4倍性能提升的DLSS3游戏再加一
焦点播报:苹果A处理器不玩性能!iPhone 16曝光:屏幕更完美、2TB售价欲超2万
环球信息:美国家庭平均月薪出炉引热议:超出想象!就这还靠信用卡续命
你贡献过几部iPhone?全球最强打工人:苹果库克年薪近1亿美元 自愿降薪40%
每日速递:监管新规下车险保费最高可降23%?业内人士:有些还会变贵
天天即时看!打破多项纪录!我国汽车产销总量连续14年全球第一:新能源暴涨翻倍
《王者荣耀》兔年春节福利一览:武则天神器传说皮肤来了
我国第一型“金牌火箭” 长二丙火箭成功发射亚太6E卫星
全球动态:[概率论与数理统计]笔记:3.5 大数定律与中心极限定理
环球滚动:Spring Cloud Alibaba 2022.0.0.0 版本发布啦!
国产高端手机份额第一!卢伟冰:小米13系列好评99% 自然销量高
【天天快播报】史上第一颗6GHz CPU!i9-13900KS发布:性能涨3% 价格涨20%
理想汽车CEO曾试图接触威马沈晖?本人回应:纯属放屁!
世界新资讯:韩国第一个月球探测器发回第一张照片:地月黑白合影
每日资讯:【深度学习】常用PyTorch CUDA版本whl下载及在线安装命令
世界今日讯!「闲话随笔」势能分析法
全球短讯!MQ——如何选择消息队列
微头条丨女子乘火车遇麻将专列生意火爆 还能K歌引围观:网友直呼想买站票
全球观焦点:三级应急响应启动!寒潮预警升级 降温图又变紫了:局地降超20度
天天观天下!盖茨自曝他的主力机是三星Galaxy Z Fold4:李在镕送的
全球热文:《卧龙:苍天陨落》中配预告 声优大佬云集、虎牢关战吕布超燃
学习笔记——Mybatis中缓存机制