最新要闻
- 环球速读:51岁已被游客喊了十多年谭爷爷!熊猫饲养员谭金淘“出圈”
- 全球快讯:17岁少年骑共享单车52天5000公里!成都-拉萨-新疆 穿越无人区
- 当前快看:12岁男孩玩游戏一个月花掉10多万!家长申请退款却遭拒绝
- 聊一聊:iOS 16.5 RC准正式版推送!iOS 16系统更新要绝唱了
- 每天坐高铁上下班是什么体验?一个月2400元
- 拒绝爆显存!RTX 4060 Ti 16GB曝新料:功耗增加5W|环球观点
- 工程粉墙合同范本(实用4篇)
- 环球新资讯:长征九号、长征十号火箭发动机好消息!200吨、载人可复用
- 男子淄博吃烧烤吐槽扇贝肉指甲大 网友:应该去青岛|世界最新
- 再也不用担心爱车被破坏!理想官方详解哨兵模式:三大优势|环球观热点
- 要闻速递:昔日安卓手机王者!HTC U23 Pro官宣:搭载骁龙7芯片
- 当前讯息:观战台:曼城阿森纳继续隔空对话 巴萨赢球即夺冠
- 精选!2022年全球电动车销量排行榜前十名出炉:中国霸气占7席
- 这届年轻人“断亲”或已成常态 90后/00后几乎都不走亲戚:原因无奈
- 看点:杲杲冬日光明暖真可爱什么意思-杲杲冬日光明暖真可爱
- 男子报案在香港中环码头遭遇抢劫 其周杰伦演唱会门票被抢走
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
焦点热议:线段树
(资料图片)
线段树--解决区间问题的数据结构,相比于树状数组,更具有普适性;
完全二叉树的性质:根节下标为1,,节点为 i 的节点,左子节点为2*i,右子节点为2*i+1;
代表nums中单个元素的节点tree[x]应当在树的最底层,即叶子节点;更大的区间从叶子节点开始向上构成;
代表区间【L,R】的节点 tree【i】,左子节点tree【2*i】表示区间【L,(L+R)/2】的区间和;右子节点tree【2*i+1】表示区间 【(L+R)/2 +1, R】的区间和;
初始化tree数组的大小 总是 令 其 为 4*n;类似于归并排序、快排的分治算法,将原问题不断的划分为左右子问题;
代码摘自:线段树从入门到急停 - 力扣(LeetCode)非常详细;
核心:一个就是注意单点修改时,递归结束条件的判断,是查询单点的话,就是 左右边界相等终止;查询区间和的话, 判断当前区间是否落在 所求范围内,是的话就加上这个区间;
另一个就是拓展:区间和数组可以替换为区间最值问题;求区间最大值、区间最小值等;
再一个就是区间修改问题,有两种,一种是增量式修改,因为注意到我们的区间和,若不关注每个具体的值,只是区间和的大小,我们无需每次都向下更新到叶子节点,否则会达到O(N)时间复杂度;因此 需要增加一个 数组,判断当前增量是否已经向下更新,我们称之为懒惰标记;; 第二种就是 覆盖式修改:将区间的值都修改为同一值,此时,我们不能依据增量式修改的方法,因为可能修改为0,而向下更新的标记 也是检查是否为0,从而 会产生冲突,所以另起一个数组,判断是否已经向下覆盖;;
代码实现:(此处将 两种修改方法写在一起了,建议分开写)
#includeusing namespace std;class Segement_tree{private: vector nums; vector tree; vector lazy; vector is_updated; int n; void pushUp(int i){ tree[i] = tree[2*i] + tree[2*i + 1]; } void build(int left, int right, int i){ if(left == right){ tree[i] = nums[left]; } int mid = (left + right) / 2; build(left, mid, 2*i); build(mid + 1, right, 2*i + 1); pushUp(i); } /*单点修改*/ void add(int index, int x, int left, int right, int i){ if(left == right){ tree[i] += x; return; } int mid = (left + right)/2; if(index <= mid){ add(index,x,left,mid,2*i); }else{ add(index,x,mid+1,right,2*i+1); } pushUp(i); } void update(int index,int x,int left, int right,int i){ if(left == right){ tree[i] = x; return; } int mid = (left + right) /2; if(index <= mid){ update(index,x,left,mid,2*i); }else{ update(index,x,mid+1,right,2*i+1); } pushUp(i); } int query(int index,int left,int right, int i){ if(left == right) return tree[i]; int mid = (left + right) /2; if(index <= mid){ return query(index,left,mid,2*i); }else{ return query(index,mid+1,right,2*i+1); } } /*区间求和*/ int sum(int left, int right, int s, int t, int i){ if(left <= s && t <= right) return tree[i]; int mid = (s + t) /2; int res = 0; if(left <= mid){ res += sum(left,right, s, mid, 2*i); } if(right > mid){ res += sum(left,right, mid+1, t, 2*i+1); } return res; } /*区间修改: 增量式 */ void add(int left, int right, int x,int s, int t, int i){ if(left <= s && t <= right){ tree[i] += (t-s+1)*x; if(s != t) lazy[i] += x; return; } int mid = (s + t)/2; if(lazy[i] != 0) pushDown(s,mid,t,i); if(left <= mid) add(left,right,x,s,mid,2*i); if(right > mid) add(left,right,x,mid+1,t,2*i+1); pushUp(i); } void pushDown(int s,int mid, int t,int i){ tree[2*i] += (mid-s+1)*lazy[i]; lazy[2*i] += lazy[i]; tree[2*i+1] += (t-mid)*lazy[i]; lazy[2*i+1] += lazy[i]; lazy[i] = 0; } /*区间修改: 覆盖式 */ void update(int left, int right,int x,int s,int t,int i){ if(left <= s && t <= right){ tree[i] = (t-s+1)*x; if(s != t){ lazy[i] = x; is_updated[i] = true;//未推送 } return; } int mid = (s+t)/2; if(is_updated[i]) pushDown1(s,mid,t,i); if(left <= mid) update(left,right,x,s,mid,2*i); if(right > mid) update(left,right,x,mid+1,t,2*i+1); pushUp(i); } void pushDown1(int s,int mid,int t,int i){ tree[2*i] = (mid - s + 1)* lazy[i]; lazy[2*i] = lazy[i]; is_updated[2*i] = true; tree[2*i+1] = (t - mid) * lazy[i]; lazy[2*i+1] = lazy[i]; is_updated[2*i+1] = true; is_updated[i] = false; lazy[i] = 0; }public: Segement_tree(vector & nums){ this->n = nums.size(); this->nums = nums; this->tree.resize(4*n, 0); this->lazy.resize(4*n, 0); this->is_updated.resize(4*n, 0); build(0, n-1, 1); } /*单点修改*/ void add(int index, int x){ add(index,x,0,n-1,1); } void update(int index,int x){ update(index,x,0,n-1,1); } int query(int index){ return query(index, 0, n-1,1); } /*区间求和*/ int sum(int left,int right){ return sum(left,right,0, n-1,1); } /*区间修改 : 增量式*/ void add(int left,int right,int x){ add(left,right,x,0,n-1,1); } /*区间修改: 覆盖式 */ void update(int left,int right, int x){ update(left,right,x,0,n-1,1); }};int main(){ system("pause"); return 0;}
关键词:
-
【LeetCode剑指offer#04】包含min函数的栈、栈的压入、弹出序列(辅助栈的应用)
包含min函数的栈https: leetcode cn problems bao-han-minhan-shu-de-zhan-lcof 定义栈的数据结构,请在该
来源: 焦点热议:线段树
【LeetCode剑指offer#04】包含min函数的栈、栈的压入、弹出序列(辅助栈的应用)
环球速读:51岁已被游客喊了十多年谭爷爷!熊猫饲养员谭金淘“出圈”
全球快讯:17岁少年骑共享单车52天5000公里!成都-拉萨-新疆 穿越无人区
当前快看:12岁男孩玩游戏一个月花掉10多万!家长申请退款却遭拒绝
聊一聊:iOS 16.5 RC准正式版推送!iOS 16系统更新要绝唱了
使用go-cqhttp搭建qq机器人
每天坐高铁上下班是什么体验?一个月2400元
拒绝爆显存!RTX 4060 Ti 16GB曝新料:功耗增加5W|环球观点
WSL Ubuntu 安装 minikube 世界热消息
工程粉墙合同范本(实用4篇)
环球新资讯:长征九号、长征十号火箭发动机好消息!200吨、载人可复用
男子淄博吃烧烤吐槽扇贝肉指甲大 网友:应该去青岛|世界最新
再也不用担心爱车被破坏!理想官方详解哨兵模式:三大优势|环球观热点
要闻速递:昔日安卓手机王者!HTC U23 Pro官宣:搭载骁龙7芯片
当前讯息:观战台:曼城阿森纳继续隔空对话 巴萨赢球即夺冠
精选!2022年全球电动车销量排行榜前十名出炉:中国霸气占7席
这届年轻人“断亲”或已成常态 90后/00后几乎都不走亲戚:原因无奈
瑞吉外卖day4
看点:杲杲冬日光明暖真可爱什么意思-杲杲冬日光明暖真可爱
男子报案在香港中环码头遭遇抢劫 其周杰伦演唱会门票被抢走
世嘉公布《魔界战记7》角色“彼岸绝胜斋”中文版介绍影像 为最恶毒剑士
人气手游《赛马娘》樱花进王1/7比例手办现已开定 将于10月发售
《爱恋冰果室》即将登陆XboxS 为恋爱经营模拟游戏
【世界新视野】4月新能源销量排名:最亮眼的 竟然不是比亚迪
当前速读:为什么面粉没有以前的香?加了添加剂安全吗?
焦点信息:员工病假15年起诉IBM:认为工资无法赶上通胀
舞台剧《全职猎人》在东京银河剧场举行公开彩排 讲述小杰等人故事
《圣斗士星矢》真人电影在北美上映 烂番茄新鲜度已降至17%
《塞尔达传说:王国之泪》官方推出系列周边 包括T恤与水杯等产品
小岛秀夫纪录片即将上线翠贝卡电影节首映 时长约为90分钟
《SD高达激斗同盟》新DLC水星的魔女现已发售 国区定价为48元
90后跆拳道女运动员娜娜摆摊卖水果 积极向上态度引发网友赞叹
【世界新视野】Python学习之五_字符串处理生成查询SQL
spring框架_@AutoWiredAnnotationBeanPostProcessor执行分析 今日聚焦
中国恒大公告:许家印成被执行人,涉及金额超 60 亿元-世界热门
某考研机构欲花百万请孟羽童代言 网友热议:赢麻了|当前快报
男子剪鼻毛致鼻腔感染住院12天 医生提醒:非常危险|每日信息
全球看点:将乔峰、郭靖等改写成大学生!金庸生前诉江南案终审宣判:获赔188万
Hyper Demon拆解 当前速看
新疆维吾尔自治区阿勒泰市2023-05-13 12:01发布暴雨蓝色预警 全球热闻
女子辞年薪50万工作照顾瘫痪奶奶:只想陪她走完最后一程-全球微头条
世界快播:国人最爱买啥车?2023新车购买意向研报出炉:比亚迪夺冠
券后9块9!汤臣倍健维生素D钙片大促:手慢真的无
环球新动态:苏享茂家属称收到翟欣欣660万还款,后者被判退还千万财物
热门:恒大汽车公告:剥离地产业务因资金不足已暂缓生产恒驰5
世界快资讯丨理想城市NOA测试画面曝光 马斯克:看起来有点眼熟
世界热门:AI出来后第一个失业的是孙燕姿?歌迷齐呼:等你的演唱会
天天速讯:夜莺初探四·mtail插件采集日志指标
《首次公开募股(IPO)企业品牌建设指南》标准立项暨“IPO企业品牌辅导专项行动”正式启动_动态
撑起国产芯片!华为继续摸索半导体核心技术:新专利带来更高效封装 天天微头条
伐木累暗示速激12
怎样查询个人养老保险缴纳的情况信息 怎样查询个人养老保险缴纳的情况|信息
当前资讯!男童酒店客房误食用过的安全套 家长与酒店吵翻:网友直呼太巧合
90后宝爸拽脚倒提1岁女儿摸金鱼 妈妈称没危险:网友吐槽为啥要摸 世界微资讯
今日热议:广西:5月13日至15日开展高考志愿填报演练
世界快播:分布式系统常见问题
百度手机曝光:后置双摄+4G网络 世界快资讯
骁龙888再就业!荣耀新平板入网:13英寸超大LCD屏_全球速看
德普拿下超级香水合约
速递!AI出来后第一个失业的是孙燕姿:为什么说她的音色不受法律保护
天天最资讯丨中国地形地貌最全的省份:你可能想不到
专家称睡满8小时是误区:张朝阳曾称四小时足够 睡多浪费
项目一个不留!OPPO放弃ZEKU自研芯片业务:多大代价都是最小代价 世界快资讯
法网公布奖金分配:总额提升12.3%,低排位选手获利,冠军230万欧-世界今日报
全球今热点:地位远超iPhone!苹果Reality Pro头显12月大规模量产:售价超2万
环球快播:小白也能辨别!买独显轻薄本必须要看的四大规格
马斯克:当Linda Yaccarino准备好时,我们会在Twitter Spaces进行实时音频对话,欢迎提问任何事情。-每日报道
有赞一面:亿级用户DAU日活统计,有几种方案?-每日速递
每日快播:gazebo+rviz 仿真
OPPO放弃自研芯片!马里亚纳X/Y官网页面悄然404_环球微速讯
天天快报!国外玩家质疑《塞尔达传说:王国之泪》涉嫌抄袭:照搬游戏机制
二次圆满成功!中国可重复火箭发动机传喜讯 今头条
在美国加州 我亲眼见到了Google对AI的孤注一掷_每日热闻
性能秒RTX 4060?AMD新显卡性能实测 光追是短板 今日报
庄河市气象局发布雷电黄色预警【III级/较重】【2023-05-13】
成都惠蓉保报销有等待期吗? 当前播报
4K【龙与地下城:侠盗荣耀】
苹果MacBook新专利公布 掌托与触控板位置实现触控交互
深圳一公司通知母亲节放假3天 每位员工将收到一套礼盒
全国多地气温开始火速上升 北方将迎来今年首轮高温天气过程
电影《灌篮高手》宣布密钥延期 将延长上映至6月19日
DC电影公布《闪电侠》国内首波口碑 将于6月16日全国上映
bilibili云剪辑将于今年5月31日下线 其访问入口关闭
电视剧《庆余年2》宣布正式开机 其海报细节涉嫌抄袭国外艺术家
林志颖首次现身珠海赛车场 身体状态颇为不错
京都动画工作室纵火杀人案9月5日公审 为平成时代最致命案件
迪士尼真人巨制《小美人鱼》即将上映 现已宣布内地版配唱阵容
当前关注:第三章.数据库系统(重点)
使用Pandoc构建Acm模板-焦点简讯
Epic下周神秘游戏喜加4:不是老头环、大表哥2|世界要闻
6死20余伤!广州宝马X3撞人案动机公开:发泄个人情绪 焦点信息
苏丹首都喀土穆等地的武装冲突12日仍在持续|每日速递
剑指 Offer 03. 数组中重复的数字-头条
REITs审核关注事项优化 突出以“管资产”为核心
【新华解读】科创50ETF期权上市启动 丰富市场风险管理工具
先到先停!上海一男子交停车费,回来没有车位停,觉得保安在狡辩
卫士重生_世界新动态
《塞尔达传说:王国之泪》被玩家仅用94分钟通关|当前消息
树状数组--动态维护区间操作-新动态