#include<cstdio>
#include<algorithm>
using namespace std;
#define L o<<1
#define R (o<<1)|1
struct Node
{
int l,r,sum,Max,Min;
}Tree[1000<<2];
void PushUp(int o)
{
Tree[o].sum = Tree[o*2].sum + Tree[o*2+1].sum;
Tree[o].Max = max(Tree[o*2].Max,Tree[o*2+1].Max);
Tree[o].Min = min(Tree[o*2].Min,Tree[o*2+1].Min);
}
void Build(int o,int l,int r)
{
//首先记录l和r的值
Tree[o].l = l;
Tree[o].r = r;
if (l == r) //到达最底层,递归终止
{
int t;
scanf ("%d",&t); //输入数据
Tree[o].sum = Tree[o].Max = Tree[o].Min = t; //更新节点数据
return;
}
int mid = (l+r) >> 1; //找到中间节点
Build(o*2 , l , mid); //递归建左子树
Build(o*2+1 , mid+1 , r); //递归建右子树
PushUp(o); //更新当前节点的值
}
void UpDate(int o,int l,int r,int x,int y) //把x节点更新为y
{
if (l == r) //递归结束
{
Tree[o].Max = Tree[o].Min = Tree[o].sum = y; //精确找到了节点,更新
return;
}
int mid = (l+r) / 2; //找到中间位置
if (x <= mid)
UpDate(o*2,l,mid,x,y); //找左子树
else
UpDate(o*2+1,mid+1,r,x,y); //找右子树
PushUp(o); //更新当前节点
}
int QuerySum(int o,int l,int r,int x,int y) //查找x到y的和
{
if (l == x && r == y) //如果恰好是当前节点,就返回
{
return Tree[o].sum;
}
int mid = (l + r) / 2;
if (mid >= y) //全在左边
return QuerySum(o*2,l,mid,x,y);
else if (x > mid) //全在右边
return QuerySum(o*2+1,mid+1,r,x,y);
else //一半在左一半在右
return QuerySum(o*2,l,mid,x,mid) + QuerySum(o*2+1,mid+1,r,mid+1,y);
}
int QueryMax(int o,int l,int r,int x,int y)
{
if(x == l && y == r){
return Tree[o].Max;
}
int mid = (l + r) / 2;
if(mid >= y){
return QueryMax(o*2,l,mid,x,y);
}
else if(mid < x){
return QueryMax(o*2 + 1,mid+1,r,x,y);
}
else {
return max(QueryMax(o*2,l, mid, x, mid),QueryMax( o*2 + 1, mid+1, r, mid+1, y));
}
}
int QueryMin(int o,int l,int r,int x,int y)
{
if(x == l && y == r){
return Tree[o].Min;
}
int mid = (l + r) / 2;
if(mid >= y){
return QueryMin( o*2, l, mid, x, y);
}
else if(mid < x){
return QueryMin( o*2 + 1, mid+1, r, x, y);
}
else {
return min(QueryMin( o*2, l, mid, x, mid),QueryMin( o*2 + 1, mid+1, r, mid+1, y));
}
}
int main()
{
int n;
scanf ("%d",&n);
Build(1,1,n);
// UpDate(1,1,n,2,7);
QuerySum(1,1,n,2,4);
QueryMax(1,1,n,2,4);
QueryMin(1,1,n,2,4);
printf ("Sum:%d Max:%d Min:%d\n",QuerySum(1,1,n,2,4),QueryMax(1,1,n,2,4),QueryMin(1,1,n,2,4));
return 0;
}
相关推荐
Python | 处理CMIP6 NC数据,以tas为例
各位同学,一般在文章最后一章我们可能会做不同气候情景下变量的未来时空变化特征,类似上图。从cmip6下载的nc数据常需要转换格式、裁剪到研究区和重采样等,本期代码可以解决这类问题。
线段树【模板整理】
初学线段树,参考博客链接https://blog.youkuaiyun.com/zearot/article/details/52280189 另外附上一道裸的线段树模板题帮助理解https://blog.youkuaiyun.com/tigerisland45/article/details/81322976(一个数组实现) 感谢两位博主 模板: #define maxn 100007 //元素...
CUDA编译踩坑实录:如何正确设置-gencode参数适配你的GPU算力
本文深入解析CUDA编译中-gencode参数的核心原理与实战配置,帮助开发者解决常见的'Unsupported gpu architecture'错误。通过厘清虚拟架构与真实架构的区别,并提供多版本兼容的CMake配置方案,确保编译出的代码能精准适配不同GPU算力,兼顾性能与广泛兼容性。
【模板】我自己的线段树
自用线段树模板,如果你觉得有用就学习学习吧~
GEE AI: 利用 Satellite Embedding 语义搜索快速识别研究区目标斑块
摘要 本文介绍了一种基于Google Earth Engine的遥感语义搜索技术,利用Satellite Embedding数据集快速识别目标地物。该方法通过将光谱信息转化为高维向量,在武汉市的案例中展示了如何:1)定义研究区和样本点;2)加载预处理的Embedding数据;3)计算向量相似度;4)结合面积过滤优化结果。相比传统监督分类,该技术具有响应快速(无需模型训练)、抗季节干扰和精准界定等优势,特别适用于森林碳储量监测和土地利用检测等应用场景。文中提供了完整的GEE代码实现流程,包括样本定义、相似度计
正版63棋牌源代码游戏+728游戏全套带前端源代码解析
这俩天抽时间仔细看了一下这套项目包含完整的前端、后端及后台管理系统。从上传的截图可以看出,前端基于资源目录,后端采用和,后台管理界面提供数据查询与管理功能。本篇文章将从前端结构、后端接口、数据库设计、常见 BUG 及优化方法等方面逐步拆解,并给出相应的代码示例和实践经验。
刘汝佳 线段树模板
一、线段树(点修改) update
【CAN总线测试】——使用VH6501 进行Busoff快慢恢复测试
即在IDBase中填标准帧11位二进制ID,如果不满11位,高位补零,凑齐11位,并将下方CurrTriggerField设置干扰前一位AckSlot位,Triggeroffset设置为0。首先确认环境支持VN6501,6501硬件连接成功后,工程的小闪电是正常黄色状态,若是灰色证明缺少License,或者软件安装环境不正确。填写干扰报文ID、干扰位置 注意这里的干扰位置是实际干扰的前一位,TriggerOffset表示偏移量,可以干扰某个字节的具体位.找到并打开Panel后,开启工程,并且配置面板。
线段树 - 模板
线段树板子0: #include<cstdio> #include<iostream> #define ll long long #define _for(i,a,b) for(ll i = (a);i < (b); ++i) using namespace std; const ll maxn = 1e5+5; void build_tree(ll arr[],ll tree[],ll node,ll start,ll end){ //printf("Start : %
YOLOv11【第三章:高阶应用与落地篇·第7节】多任务联合训练(Multi-Task Learning):检测+分割+关键点三头并进!
🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。
【电机应用控制】——步进电机控制原理(四相五线/两相四线/细分驱动)&驱动器&梯形/S形加减速算法&直线/圆弧插补
步进电机是一种把电脉冲信号转换为角位移(左)或线位移(右)的电动机。两相通常1.8°,三相通常1.2°、无相通常0.72°,角位移=脉冲个数X步距角。在非超载且不超频的情况下,电机的旋转位置只取决于脉冲个数,转速只取决脉冲信号的频率。所以只需要统计脉冲个数和频率,不再需要编码器测速和位置,具有优秀的开环能力,当然也可接编码器反馈速度和位置数据,实现更加精准的闭环控制。永磁式动态性能好,输出力矩大,但步距角大通常7.5°;反应式(磁阻式)结构简单成本低,步距角小一般1.2°,但振动噪音大动态性能差;
线段树 模板题 笔记
线段树 模板题 笔记
SXU-软件项目管理-朱少民-第九章 项目监控与控制 第十章 项目收尾 附相关习题
软件项目管理-朱少民-第九章 项目监控与控制 附相关习题
线段树模板整理
综述线段树的原理:将[1,n]分解成若干特定的子区间(数量不超过4*n),然后,将每个区间[L,R]都分解为少量特定的子区间,通过对这些少量子区间的修改或者统计,来实现快速对[L,R]的修改或者统计。 作用:对编号连续的一些点的区间信息进行修改或者统计操作 主要操作:区间查询、点更新、区间更新 时间复杂度:修改和统计的复杂度都是O(log(N))由原理可以看出线段树维护的信息必须满足区间加法
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
线段树模板1
#include<stdio.h> const int MAXN =2e5+5; typedef long long ll; //次模板一般用于大数据,开long long int numbers[MAXN]; struct node{ int l=0,r=0;//左 右结点 int val=0;//该点的值 }tree[MAXN*4]; // /* 模板大意:对n个数,...
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
线段树--模板
线段树的命名tree线段树的创建 build线段树的查询 query10月4日的线段树模板(现更新)问题:不够简洁#include<iostream> using namespace std; const int maxind=256; int segTree[maxind*4+10]; int array[maxind]; bool flag=false; inline min(in...
线段树 模板之求和
本人水平有限,题解不到为处,请多多谅解 本蒟蒻谢谢大家观看 题目: Problem A: 线段树之Sum Time Limit:1 SecMemory Limit:128 MBSubmit:187Solved:130[Submit][Status][Web Board] Description 给定一数列,规定有两种操作,一是修改某个元素,二是...
【模板】线段树
【模板】线段树本篇博文只有模板,emmm。 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩。——摘自百度百科 因此,线段树是一种复杂度极为优秀(
线段树模板(对应洛谷一道线段树模板题)
*最近正好在学线段树,搞懂后写一篇博客记录一下模板,供日后自己学习参考*
线段树 模板题整理
线段树模板题整理 (基于洛谷OJ) 1.P3372 【模板】线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 kk。 求出某区间每一个数的和。 输入格式 第一行包含两个整数 n, mn,m,分别表示该数列数字的个数和操作的总个数。 第二行包含 nn 个用空格分隔的整数,其中第 ii 个数字表示数列第 ii 项的初始值。 接下来 mm 行每行包含 33 或 44 个整数,表示一个操作,具体如下: 1 x y k:将区间 [x, y][x,y] 内每个数加上 kk。 2
1384



被折叠的 条评论
为什么被折叠?



