线段树模板

2023-11-15

线段树属于高级数据结构,本文粗略地讲解了一下线段树的模板,大家直接拿去用就好。

long long ls(int x){return x<<1;}
long long rs(int x){return x<<1|1;}
const int kmax = 1e5 + 10;
struct segmenttree
{
	long long l,r;//区间d左值,右值
	long long sum;//区间和
	long long lazy;//懒惰标记
}t[kmax<<2]long long a[kmax];
void pushup(int p)
{//区间和等于左半部分区间和加右半部分区间和
	t[p].sum = t[p<<1].sum + t[p<<1|1].sum;
}

void pushdown(int p)
{
	if(t[p].lazy){
	//如果有懒惰标志,则向下传递
	t[ls(p)].sum += t[p].lazy * (t[ls(p)].r - t[ls(p)].l + 1);
	t[rs(p)].sum += t[p].lazy * (t[rs(p)].r - t[rs(p)].l + 1);
	t[ls(p)].lazy += t[p].lazy;
	t[rs(p)].lazy += t[p].lazy;
	t[p].lazy = 0;
	}
}
void bulid(long long p,long long l,long long r)
{//建树,调用方式build(1,1,n);
	t[p].l = l,t[p].r = r;
	if(l==r)//如果到达叶节点,则他的值等于原数组中的数
	{
		t[p].sum = a[l];
		return;
	}
	long long mid = (l+r)>>1;//否则递归左半右半区间
	build(ls(p),l,mid);
	build(rs(p),mid + 1,r);
	pushup(p);
}

void change(long long p,long long l,long long r,long long d)
{//区间修改,调用方式change(1,l,r,d);
	if(l<=t[p].l&&r>=t[p].r)//如果该区间完整覆盖了目标区间,修改并直接返回
	{
		t[p].sum += d * (t[p].r - t[p].l + 1);
		t[p].lazy += d;
		return;
	}
	pushdown(p);//否则向下传递懒惰标记,并递归左半右半区间
	long long mid = (t[p].l + t[p].r) / 2;
	if(l<=mid)change(ls(p),l,r,d);//如果有一部分在左区间,递归左区间
	if(r>mid)change(rs(p),l,r,d);//如果有一部分在右区间,递归右区间
	pushup(p);
}

long long query(long long p,long long l,long long r)//当前的结点编号
{//区间求和,调用方式query(1,l,r);
	if(l<=t[p].l&&r>=t[p].r)return t[p].sum;//如果该区间完整覆盖了目标区间,直接返回
	pushdown(p);//否则向下传递懒惰标记,并递归左半右半区间
	long long mid  = (t[p].l + t[p].r) / 2;
	long long sum = 0;
	if(l<=mid)sum+=query(ls(p),l,r);//如果有一部分在左区间,递归左区间
	if(r>mid)sum+=query(rs(p),d,l,r);
	return sum;//返回累加和
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线段树模板 的相关文章

  • InvalidOperationException - 对象当前正在其他地方使用 - 红十字

    我有一个 C 桌面应用程序 其中我连续创建的一个线程从源 实际上是一台数码相机 获取图像并将其放在 GUI 中的面板 panel Image img 上 这必须是另一个线程 如它是控件的代码隐藏 该应用程序可以工作 但在某些机器上 我会在随
  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 最近大火的ChatGPT和RPA机器人相结合会带来什么前景?

    ChatGPT是由人工智能技术驱动的自然语言处理工具 它可以通过理解和学习人类语言进行对话 并根据聊天的上下文进行互动 真正像人类一样进行聊天和交流 甚至完成撰写电子邮件 视频脚本 文案 翻译 代码 写论文等任务 ChatGPT和RPA都是
  • line-height行高的解析

  • golang 框架_Go Web 框架 Gin 实践9—将Golang应用部署到Docker

    Go语言中文网 致力于每日分享编码知识 欢迎关注我 每天一起进步 项目地址 https github com EDDYCJY go gin example 注 开始前你需要安装好 docker 配好镜像源 本章节源码在 f 20180324
  • 同花顺某v参数详解

    声明 本文章中所有内容仅供学习交流 抓包内容 敏感网址 数据接口均已做脱敏处理 严禁用于商业用途和非法用途 否则由此产生的一切后果均与作者无关 若有侵权 请联系我立即删除 目标站点 aHR0cDovL3EuMTBqcWthLmNvbS5jb
  • 自定义控件中 wrap_content 属性无效的分析解决

    问题 在自定义一个类似锁屏页面时间日期样式的控件 继承 View 的时候 发现在 xml 中使用 wrap content 属性相当于使用了 match parent 属性 原因分析 进入View的源码 可以看到 onMeasure 的方法
  • jdbc连接数据库(MySQL 8.0.19)url设置

    本文只针对下述版本的url设置问题 我的JDK版本是11 0 1 MySQL版本8 0 19 MySQL的8系列版本应该都可以 一般连接失败的原因是url没设置好 这里我所设置的url亲测有效 String urlString jdbc m
  • Kali之渗透攻击

    渗透攻击是指黑客为了获得非法利益 通过各种手段进入网络系统 计算机系统中 在未经授权的情况下获取信息 利用漏洞控制系统和执行越权操作的一种行为 其目的在于获取非法利益 破坏或者窃取关键数据 以及对网络系统进行控制 在学习渗透攻击这一知识点过
  • world特殊符号

    world特殊符号 论文需要 和圆里面一个乘号 论文需要 和圆里面一个乘号 1 首先打开word文档 找到要 插入符号 的地方 2 选择插入功能下面的 符号按钮 3 选择符号下面的 其他符号 4 将字体选为 symbol 这个字体 5 在这
  • Hive 一文读懂

    Hive 简介 1 1 什么是Hive 1 hive简介 Hive 由Facebook开源用于解决海量结构化日志的数据统计 Hive是基于Hadoop的一个数据仓库工具 可以将结构化的数据文件映射为一张表 并提供类SQL查询功能 2 Hiv
  • opencv边缘检测-拉普拉斯算子

    sobel算子一文说了 索贝尔算子是模拟一阶求导 导数越大的地方说明变换越剧烈 越有可能是边缘 那如果继续对f t 求导呢 可以发现 边缘处 的二阶导数 0 我们可以利用这一特性去寻找图像的边缘 注意有一个问题 二阶求导为0的位置也可能是无
  • python报错AttributeError module ‘scipy.misc‘ has no attribute ‘imresize‘和 ‘imread‘

    python报错AttributeError module scipy misc has no attribute imresize 和 imread 报错原因 scipy版本过高 解决方案 降低scipy版本 如下 pip install
  • 迁移学习之resnet50——解决过拟合及验证集上准确率上不去问题

    keras之resnet50迁移学习做分类 问题1描述 迁移学习用resnet50做分类 验证集上的准确率一直是一个大问题 有时候稳定在一个低的准确率 我的一次是一直在75 上下波动 问题2描述 resnet50迁移学习 训练集上的准确率一
  • IDEA使用jsp可以访问页面,转换为html弹出页面为404

    这种办法为绕过controller直接访问静态页面 大家只要路径对 在springmvc xml中配置好一个 标签即可
  • 【mysql】mysql 常用建表语句

    1 建立员工档案表 要求字段 员工员工编号 员工姓名 性别 工资 email 入职时间 部门 2 合理选择数据类型及字段修饰符 要求有NOT NULL auto increment primary key等 make by kakane D
  • arcgis10.2破解版下载及其详细教程;;;附带10.1-10.6的破解版,没有教程

    1 arcgis10 2破解版 https blog csdn net bigemap article details 81131840 2 arcgis10 1 10 5破解版安装包 https blog csdn net e wsq a
  • 【c++】8.map和vector容器查找、删除指定元素、emplace、insert

    1 查找与删除 vector 和 map 容器中指定元素 vector 查找或删除vector的指定元素 123 方法1 使用迭代器 不同于map map有find方法 vector本身没有find这一方法 std vector
  • 从浅到深理解bert

    更多查看https github com B C WANG AI Storage 4 2 4 2从浅到深理解bert 4 2 1 理解Attention 参考https www cnblogs com robert dlut p 86382
  • Pytorch save_image和make_grid函数详解

    Pytorch save image和make grid函数详解 make grid用于把几个图像按照网格排列的方式绘制出来 save image用于保存图像 这两个函数的函数签名差不多 所以只说一个 def make grid tenso
  • excel python插件_再见 VBA!神器工具统一 Excel 和 Python

    大家好 我是东哥 经常给大家推荐好用的数据分析工具 也收到了铁子们的各种好评 这次也不例外 我要再推荐一个 而且是个爆款神器 Excel和Jupyter Notebok都是我每天必用的工具 而且两个工具经常协同工作 一直以来工作效率也还算不
  • 线段树模板

    线段树属于高级数据结构 本文粗略地讲解了一下线段树的模板 大家直接拿去用就好 long long ls int x return x lt lt 1 long long rs int x return x lt lt 1 1 const i