HDU 1166 敌兵布阵【线段树应用类型一 点更新,区间求和)】【模板】

2024-02-19 14:18

本文主要是介绍HDU 1166 敌兵布阵【线段树应用类型一 点更新,区间求和)】【模板】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

题目连接及大佬连接

///修改点,更新区间求和 模板
/*算是第一篇敲这个模板吧,注释标准*/#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=50000+5;//线段树需要维护的信息
int sum[maxn*4];
#define lson i*2, l, m
#define rson i*2+1, m+1, r
/*i节点收集子节点的统计结果*/
void PushUP(int i)
{sum[i]=sum[i*2]+sum[i*2+1];
}///递归建立线段树,i代表当前节点的编号,l,r为当前节点所代表的的区间
void build (int i, int l,int r)
{if(l==r)///当前节点为叶子节点{scanf("%d",&sum[i]);///直接构建叶节点return ;}int m=(l+r)/2;build(lson);///构建左子树build(rson);///构建右子树PushUP(i);///收集子节点的更新结果,也就是自下向上更新
}
///*在当前的区间[l,r]内 查询区间[ql,qr]区间的目标值,且能执行这个区间的前提是:
///[ql,qr]的交集非空其实本函数返回的结果就是他们交集的结果
int query(int ql,int qr,int i,int l,int r)
{if(ql<=l&&r<=qr) return sum[i];///询问的区间在当前区间,返回当前维护好的值int m=(l+r)/2;int res=0;if(ql<=m) res+=query(ql,qr,lson);if(m<qr) res+=query(ql,qr,rson);return res;
}///update()这个函数在不同题
///本题是单点更新,所以在区间[l,r]内使得第id数的值 +val,如果是区间更新,可以update的参数需将id变为ql,和qrvoid update(int id,int val,int i,int l,int r)
{if(l==r){sum[i]+=val;return ;}int m=(l+r)/2;if(id<=m) update(id,val,lson);else update(id,val,rson);PushUP(i);///时刻记住 维护i节点统计信息的正确性
}int main()
{int T;scanf("%d",&T);for(int case1=1;case1<=T;case1++){printf("Case %d:\n",case1);int n;scanf("%d",&n);build(1,1,n);char str[20];int u,v;while(scanf("%s",str)==1&&str[0]!='E'){scanf("%d%d",&u,&v);if(str[0]=='Q') printf("%d\n",query(u,v,1,1,n));else if(str[0]=='A') update(u,v,1,1,n);else update(u,-v,1,1,n);}}return 0;
}

 

这篇关于HDU 1166 敌兵布阵【线段树应用类型一 点更新,区间求和)】【模板】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/724931

相关文章

线程池ThreadPoolExecutor应用过程

《线程池ThreadPoolExecutor应用过程》:本文主要介绍如何使用ThreadPoolExecutor创建线程池,包括其构造方法、常用方法、参数校验以及如何选择合适的拒绝策略,文章还讨论... 目录ThreadPoolExecutor构造说明及常用方法为什么强制要求使用ThreadPoolExec

Nginx更新SSL证书的实现步骤

《Nginx更新SSL证书的实现步骤》本文主要介绍了Nginx更新SSL证书的实现步骤,包括下载新证书、备份旧证书、配置新证书、验证配置及遇到问题时的解决方法,感兴趣的了解一下... 目录1 下载最新的SSL证书文件2 备份旧的SSL证书文件3 配置新证书4 验证配置5 遇到的http://www.cppc

mysql_mcp_server部署及应用实践案例

《mysql_mcp_server部署及应用实践案例》文章介绍了在CentOS7.5环境下部署MySQL_mcp_server的步骤,包括服务安装、配置和启动,还提供了一个基于Dify工作流的应用案例... 目录mysql_mcp_server部署及应用案例1. 服务安装1.1. 下载源码1.2. 创建独立

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

C# WebAPI的几种返回类型方式

《C#WebAPI的几种返回类型方式》本文主要介绍了C#WebAPI的几种返回类型方式,包括直接返回指定类型、返回IActionResult实例和返回ActionResult,文中通过示例代码介绍的... 目录创建 Controller 和 Model 类在 Action 中返回 指定类型在 Action

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

python中的鸭子类型详解

《python中的鸭子类型详解》鸭子类型是Python动态类型系统的灵魂,它通过强调“行为”而非“类型”,赋予了代码极大的灵活性和表现力,本文给大家详细介绍python中的鸭子类型,感兴趣的朋友一起看... 目录1. 核心思想:什么是鸭子类型?2. 与“传统”静态类型语言的对比3. python 中无处不在

Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)

《Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)》在职场中,Word文档是公认的好伙伴,但你有没有被它折磨过?批量生成合同、制作报告以及发放证书/通知等等,这些重复、低效... 目录重复性文档制作,手动填充模板,效率低下还易错1.python-docx入门:Word文档的“瑞士