C++实现线段树(lazy-tag方法)-区间修改,区间查询

代码如下:

#include <iostream>
using namespace std;
const int N = 10010;
typedef long long LL;
LL input[N];struct node {int l, r;LL sum;LL add;
} tree[4 * N];void build(int l, int r, int u) {tree[u].l = l;tree[u].r = r;if (l == r) {tree[u].sum = input[l];return ;}int mid = (l + r) >> 1;build(l, mid, 2 * u);build(mid + 1, r, 2 * u + 1);tree[u].sum = tree[2 * u].sum + tree[2 * u + 1].sum;
}void spread(int u) {if (tree[u].add) //当lazy tag不为0时,说明当前区间已经被这个影响所作用,//这个区间的所有子区间全都攒着工作没有修改{tree[2 * u].add += tree[u].add;tree[2 * u + 1].add += tree[u].add;tree[2 * u].sum += tree[u].add * (tree[2 * u].r - tree[2 * u].l + 1);tree[2 * u + 1].sum += tree[u].add * (tree[2 * u + 1].r - tree[2 * u + 1].l + 1);tree[u].add = 0;}
}void update(int cl, int cr, int w, int u) {if (tree[u].l >= cl && tree[u].r <= cr) {tree[u].sum += (LL)w * (tree[u].r - tree[u].l + 1);tree[u].add += (LL)w;return ;}spread(u);int mid = (tree[u].l + tree[u].r) >> 1;if (cl <= mid)update(cl, cr, w, 2 * u);if (cr > mid)//不能写成(cr >= mid),不然可能会死循环update(cl, cr, w, 2 * u + 1);tree[u].sum = tree[2 * u].sum + tree[2 * u + 1].sum;
}LL query(int cl, int cr, int u) {if (tree[u].l >= cl && tree[u].r <= cr)return tree[u].sum;spread(u);int mid = (tree[u].l + tree[u].r) >> 1;LL ans = 0;if (cl <= mid)ans += query(cl, cr, 2 * u);if (cr > mid)ans += query(cl, cr, 2 * u + 1);
//	cout << ans << endl;return ans;
}int main() {int n;cin >> n;for (int i = 1; i <= n; i++)cin >> input[i];build(1, n, 1);cout << query(3, 6, 1) << endl;//查询区间[3,6]所有元素之和update(3, 6, 3, 1);//给区间[3,6]所有元素加上3cout << query(3, 6, 1) << endl;//再次查询区间[3,6]所有元素之和return 0;
}

测试结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core开发实战(第25课:路由与终结点:如何规划好你的Web API)--学习笔记(上)...

25 | 路由与终结点&#xff1a;如何规划好你的Web API路由系统在 ASP.NET MVC 框架里面就已经存在了&#xff0c;在 ASP.NET Core 框架里面进行了改进路由系统的核心作用是指 URL 和 应用程序 Controller 的对应关系的一种映射这个映射关系实际上有两种作用&#xff1a;1、把 U…

catia如何整列加工_CATIA V5 R20加工模块的自动编程方法

在数控加工领域&#xff0c;运用CATIAV5R20自动编程方法一方面可以方便地实现零件的数控编程&#xff0c;生成高效、高精度的NC程序&#xff1b;另一方面&#xff0c;可以通过实体仿真刀具路径&#xff0c;检验是否有明显的过切或者干涉现象&#xff0c;及时作出相应的修改&…

Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(一)

好吧&#xff0c;这个题目我也想了很久&#xff0c;不知道如何用最简单的几个字来概括这篇文章&#xff0c;原本打算取名《Angular单页面应用基于Ocelot API网关与IdentityServer4ASP.NET Identity实现身份认证与授权》&#xff0c;然而如你所见&#xff0c;这样的名字实在是太…

slot属性值_深入理解vue中的slot与slot

作者/云荒杯倾写在前面vue中关于插槽的文档说明很短&#xff0c;语言又写的很凝练&#xff0c;再加上其和methods&#xff0c;data&#xff0c;computed等常用选项使用频率、使用先后上的差别&#xff0c;这就有可能造成初次接触插槽的开发者容易产生“算了吧&#xff0c;回头再…

[蓝桥杯][2013年第四届真题]幸运数-模拟+dfs

题目描述 幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成 。 首先从1开始写出自然数1,2,3,4,5,6,… 1 就是第一个幸运数。 我们从2这个数开始。把所有序号能被2整除的项删除&#xff0c;变为&#xff1a; 1 _ 3 _ 5 _ 7 _ 9 … 把它们缩紧&#xff0c;重…

【翻译】.NET 5 Preview 1 发布

.NET 5 Preview 1 发布去年年底,我们发布了.NET Core 3.0和3.1.这些版本添加了桌面应用程序模型Windows Forms(WinForms)和WPF,ASP.NET Blazor用于构建SPA应用程序和用于构建分布式应用和服务的gRPC模板、用于与gRPC对话丰富的客户端代码生成、REST API服务等等.我们很高兴看到…

cubemx lan8720模块_通过STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现

本文使用了正点原子的阿波罗开发板&#xff0c;接下来我将粗略的对STM32F767通过STM32cubeMX进行以太网协议配置。具体步骤1.首先使能ETH&#xff0c;模式选择RMII&#xff1b;2.使能LWIP和FREERTOS&#xff1b;因为阿波罗的开发板PHY芯片的ETH_DXT1和ETH_DXT0用的是PG13&#…

[蓝桥杯][历届试题]网络寻路-dfs,图的遍历

题目描述 X 国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包&#xff0c;为了安全起见&#xff0c;必须恰好被转发两次到达目的地。该包可能在任意一个节点产生&#xff0c;我们需要知道该网络中一共有多少种不同的转发路径。 源地址和目标地址…

Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(二)

上文已经介绍了Identity Service的实现过程。今天我们继续&#xff0c;实现一个简单的Weather API和一个基于Ocelot的API网关。回顾《Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权&#xff08;一&#xff09;》Weather APIWeather API实现非常简单&#xf…

编程 音量键_盘点市面上那些千元级高逼格的键盘 灯光炫酷 多宏编程

随着科技的变化&#xff0c;以及电竞被更多人熟知&#xff0c;也带动了电竞外设的进步&#xff0c;现在更多的人喜欢选择机械键盘。首先机械键盘可以给我们带来超棒的敲击感&#xff0c;无论是玩游戏还是日常办公打字&#xff0c;都绝对是一等一的好。再者机械键盘在高强度使用…

DotNetCore Web应用程序中的Cookie管理

原文来自互联网&#xff0c;由长沙DotNET技术社区编译。如译文侵犯您的署名权或版权&#xff0c;请联系小编&#xff0c;小编将在24小时内删除。限于译者的能力有限&#xff0c;个别语句翻译略显生硬&#xff0c;还请见谅。作者简介&#xff1a;Jon&#xff08;Jonathan&#x…

[蓝桥杯][基础练习VIP]分解质因数-质数筛选+模拟+双指针

题目描述 求出区间[a,b]中所有整数的质因数分解。 提示 先筛出所有素数&#xff0c;然后再分解。 数据规模和约定 输入 输入两个整数a&#xff0c;b。 2< a< b< 10000 输出 每行输出一个数的分解&#xff0c;形如ka1a2a3…(a1< a2< a3…&#xff0c;k也是…

逆向so_记一次APP的so层算法逆向(七)

“ 前言&#xff1a;初学逆向 请多多指教 好累 感觉每天这样肝 人有点受不了了...”学习到的内容—1、新学习到IDA的一些分析时候的小技巧2、算法还原代码实现的练习(有个参数没有分析出来&#xff0c;后面知道了会补上的)3、在Frida中使用命令行调试的方便方法分析过程—APP登…

C++实现Huffman树

代码如下&#xff1a; #include <iostream> using namespace std; int s1, s2;typedef struct {int weight;int parent, lch, rch; } HTNode, *HuffmanTree;void Select(HuffmanTree &HT, int n, int &s1, int &s2) {int minv;//定义一个临时变量存储最小值…

.NET Core开发实战(第25课:路由与终结点:如何规划好你的Web API)--学习笔记(下)...

25 | 路由与终结点&#xff1a;如何规划好你的Web API自定义约束实现了路由约束接口&#xff0c;它只有一个 Match 方法&#xff0c;这个方法传入了 Http 当前的 httpContext&#xff0c;route&#xff0c;routeKey这个 routeKey 就是我们要验证的 key 值后面两个参数 RouteVal…

[蓝桥杯][基础练习VIP]Huffuman树

题目描述 Huffman树在编码中有着广泛的应用。在这里&#xff0c;我们只关心Huffman树的构造过程。 给出一列数{pi}{p0, p1, …, pn-1}&#xff0c;用这列数构造Huffman树的过程如下&#xff1a; 找到{pi}中最小的两个数&#xff0c;设为pa和pb&#xff0c;将pa和pb从{pi}中删除…

mysql数据去重_mysql 数据去重

数据库版本mysql5.5.10 操作工具navicate for mysql插入数据重复了 用mysql语句去重-- 查询数量是否大于1 大于1 表示有重复数据SELECT count(*) FROM financial_summary_detail t GROUP BY t.SUMMARY_ID,t.SOURCE,t.TEXT-- 根据查询创建临时表create table t_temp SELEC…

微软 Visual Studio 2019 16.5 发布:.NET 移动开发、生产力

微软最新发布了 Visual Studio 2019 16.5 版本&#xff0c;下面来看看主要更新内容&#xff1a;.NET 移动开发首先要讨论的特性是 XAML Hot Reload for Xamarin.Forms。此功能可加快开发速度&#xff0c;并使开发者可以更轻松地在移动应用的用户界面上进行构建、实验和迭代。且…

[蓝桥杯][基础练习VIP]报时助手

题目描述 给定当前的时间&#xff0c;请用英文的读法将它读出来。 时间用时h和分m表示&#xff0c;在英文的读法中&#xff0c;读一个时间的方法是&#xff1a; 如果m为0&#xff0c;则将时读出来&#xff0c;然后加上“o’clock”&#xff0c;如3:00读作“three o’clock”。…

chrome主题_谷歌Chrome将很快允许用户创建自定义主题

站长之家(ChinaZ.com) 7月31日 消息:据9to5google报道&#xff0c;虽然用户可以通过Chrome Web Store定制主题&#xff0c;但用户要根据自己的独特喜好定制主题却不是一个简单的事。谷歌正寻求通过在Chrome内置一个自定义主题生成器来解决这个问题。Chrome Web Store中有许多传…