线段树模板

模板 - 线段树 ACM-ICPC模板 懒惰标记 一行序列,每次操作把一个区间里的每个数都加上一个数,或者查询一个区间的和。 typedef long long ll; typedef pair<int,int> PII; const int INF = 0x3f3f3f3f; const int N = 1e5+7; const int M = 2007; struct SegmentTree{ int l,r; ll sum;//总和 ll lz_add;//增量延迟标记 阅读详情
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
int n,m,p;//n个结点,m种操作,操作为p
int x,y;//查询的值x或者单点修改x的值加上y
int a,b;//区间查询时使用的区间a,b;
int ans;//存储答案
struct node
{
    int left,right;//左右
    int weight;//权值
    int flag;//延迟标记
} tree[400001];
void build(int k,int ll,int rr)//建树,k是父亲节点,ll、rr左右孩子
{
    tree[k].left=ll,tree[k].right=rr;
    if(tree[k].left==tree[k].right)//如果是叶子结点,直接赋值
    {
        scanf("%d",&tree[k].weight);
        return;
    }
    int m=(ll+rr)/2;
    build(k*2,ll,m);
    build(k*2+1,m+1,rr);
    tree[k].weight=tree[k*2].weight+tree[k*2+1].weight;//求区间和,所以父亲结点是左右孩子的和
}
void down(int k)//延迟标记下传
{
    tree[k*2].flag+=tree[k].flag;
    tree[k*2+1].flag+=tree[k].flag;
    tree[k*2].weight+=tree[k].flag*(tree[k*2].right-tree[k*2].left+1);
    tree[k*2+1].weight+=tree[k].flag*(tree[k*2+1].right-tree[k*2+1].left+1);
    tree[k].flag=0;
}
void ask_point(int k)//单点查询
{
    if(tree[k].left==tree[k].right)
    {
        ans=tree[k].weight;
        return ;
    }
    if(tree[k].flag) down(k);
    int m=(tree[k].left+tree[k].right)/2;
    if(x<=m) ask_point(k*2);
    else ask_point(k*2+1);
}
void change_point(int k)//单点修改,第x个数加上y
{
    if(tree[k].left==tree[k].right)
    {
        tree[k].weight+=y;
        return;
    }
    if(tree[k].flag) down(k);
    int m=(tree[k].left+tree[k].right)/2;
    if(x<=m) change_point(k*2);
    else change_point(k*2+1);
    tree[k].weight=tree[k*2].weight+tree[k*2+1].weight;
}
void ask_interval(int k)//区间查询,查询区间和
{
    if(tree[k].left>=a&&tree[k].right<=b)
    {
        ans+=tree[k].weight;
        return;
    }
    if(tree[k].flag) down(k);
    int m=(tree[k].left+tree[k].right)/2;
    if(a<=m) ask_interval(k*2);
    if(b>m) ask_interval(k*2+1);
}
void change_interval(int k)//区间修改,把a-b之间数改成k
{
    if(tree[k].left>=a&&tree[k].right<=b)
    {
        tree[k].weight+=(tree[k].right-tree[k].left+1)*y;
        tree[k].flag+=y;
        return;
    }
    if(tree[k].flag) down(k);
    int m=(tree[k].left+tree[k].right)/2;
    if(a<=m) change_interval(k*2);
    if(b>m) change_interval(k*2+1);
    tree[k].weight=tree[k*2].weight+tree[k*2+1].weight;
}
int main()
{
    scanf("%d",&n);//n个节点
    build(1,1,n);//建树,传值根节点1,左孩子1,有孩子n
    scanf("%d",&m);//m种操作
    for(int i=1; i<=m; i++)
    {
        scanf("%d",&p);
        ans=0;
        /*以下操作传值过去的为根节点1*/
        if(p==1)
        {
            scanf("%d",&x);
            ask_point(1);//单点查询,输出第x个数
            printf("%d",ans);
        }
        else if(p==2)
        {
            scanf("%d%d",&x,&y);
            change_point(1);//单点修改
        }
        else if(p==3)
        {
            scanf("%d%d",&a,&b);//区间查询
            ask_interval(1);
            printf("%d\n",ans);
        }
        else
        {
            scanf("%d%d%d",&a,&b,&y);//区间修改
            change_interval(1);
        }
    }
}
电动汽车充电设备标准化设计方案:电气原理图 80kW一体式一机一枪充电机电气原理 主电路拓扑见图1,配置1个250A直流充电连接装置,提供4个充电模块安装位置,根据充电功率需求可选配2~4个20kW充电模块。内置直流电能表和计费控制单元,实现计量计费和充电控制功能。 图1 80kW一体式一机一枪充电机主电路拓扑 ... 阅读详情

相关推荐

英飞凌AURIX™ Development Studio(ADS)工程调试与烧录实战指南

本文详细介绍了英飞凌AURIX™ Development Studio(ADS)的工程调试与烧录实战指南。从调试环境搭建、硬件连接到断点设置、变量监控等核心调试技巧,帮助开发者快速掌握ADS安装使用教程,提升多核处理器开发效率。

k8l9m0n的博客 571

【模板】我自己的线段树

自用线段树模板,如果你觉得有用就学习学习吧~

A's World 287

高杂合度基因组组装实战:Hifiasm参数调优与purge_dups过滤效果对比(附猪毛菜案例)

本文深入探讨了高杂合度基因组组装中Hifiasm参数调优与purge_dups过滤的实战效果对比,通过猪毛菜案例详细解析了两种方法的适用场景与优化策略。文章重点分析了purge_dups在contig过滤中的显著效果,为基因组组装提供了关键的技术参考。

weixin_29232121的博客 495

线段树 - 模板

线段树板子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 : %

Spike的秃头之路 198

别再怕DRIVER_VERIFIER_DMA_VIOLATION蓝屏:手把手教你用WinDbg分析IOMMU与驱动冲突

本文深入解析DRIVER_VERIFIER_DMA_VIOLATION蓝屏错误,从IOMMU原理到实战排错,手把手教你使用WinDbg分析驱动冲突。通过理解DMA与IOMMU的核心机制、搭建分析环境、解读DMAR表与设备拓扑,最终定位问题驱动并提供解决方案,帮助开发者和IT运维人员有效应对此类系统崩溃问题。

weixin_30298497的博客 802

不写代码,Cursor 10分钟开发1个APP!保姆级教程喂饭来了

做出第一个能运行的app,那种成就感真的很棒。虽然过程可能有点折腾,但只要耐心一点,问题都能解决。记住,遇到问题不要慌,现在有AI帮忙,大部分问题都能快速解决。重要的是迈出第一步,开始动手实践。你的第一个app可能很简单,但这是一个很好的开始。随着经验积累,你能做出的东西会越来越酷。现在就开始行动吧,说不定下个月你就能向朋友炫耀你自己做的app了!

chenhong007的博客 1548

刘汝佳 线段树模板

一、线段树(点修改) update

远古小山的专栏 1万+

k8s集群部署私有镜像仓库

本文介绍了在Kubernetes集群中部署私有镜像仓库的完整方案。使用registry:2镜像创建Deployment,通过NodePort(30500)暴露服务,并采用hostPath(/data/registry)实现数据持久化。部署过程包括节点标记、YAML配置、资源创建及验证步骤,同时提供了Docker和Containerd两种环境下的详细使用方法,包括配置不信任私有仓库、镜像推送/拉取操作指南。该方案特别适合开发测试环境,为团队提供便捷的本地镜像管理能力。

weixin_42728286的博客 893

线段树模板整理

综述线段树的原理:将[1,n]分解成若干特定的子区间(数量不超过4*n),然后,将每个区间[L,R]都分解为少量特定的子区间,通过对这些少量子区间的修改或者统计,来实现快速对[L,R]的修改或者统计。 作用:对编号连续的一些点的区间信息进行修改或者统计操作 主要操作:区间查询、点更新、区间更新 时间复杂度:修改和统计的复杂度都是O(log(N))由原理可以看出线段树维护的信息必须满足区间加法

歪歪T的拿金之路 8120

Windows电脑如何用MobaXterm连接宇树G1机器人?保姆级SSH配置指南

本文提供了一份详细的保姆级教程,指导Windows用户使用MobaXterm通过SSH连接宇树G1机器人。内容涵盖从物理网络配置、MobaXterm安装与SSH会话创建,到文件传输、X11转发等高级功能,并包含常见问题排查与安全加固建议,帮助开发者快速建立稳定可靠的远程开发连接。

purple的博客 877

YOLOv11改进入门篇 | 手把手讲解改进模块如何实现高效涨点,以SimAM注意力模块为例

本文记录的是基于SimAM注意力模块的YOLOv11目标检测方法研究。SimAM注意力模块通过优化能量函数来获得每个神经元的三维权重,而或增加计算复杂度。若是有轻量化需求的小伙伴,无参的注意力模块也许是一个不错的选择。

Limiiiing的博客 9035

线段树 模板题 笔记

线段树 模板题 笔记

flyhigh521949的博客 648

11.8 LangGraph生产级AI Agent开发:从节点定义到高并发架构的终极指南

本文介绍了如何使用 LangGraph 构建生产级 AI Agent,重点解析了 LangGraph 的核心设计、节点与边的实现方法论、生产级实现技巧以及性能优化策略。LangGraph 通过图结构抽象复杂 AI 工作流,核心组件包括节点、边、状态和检查点。节点通过 Python 函数封装原子业务逻辑,边通过条件分支实现动态工作流。生产级实现技巧包括状态管理、多会话控制和错误处理机制。性能优化策略涉及并行执行和缓存机制设计。文章还提供了旅行规划 Agent 的实战案例和常见问题解决方案,帮助开发者构建高效、

yonggeit的博客 3268

线段树模板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个数,...

AXKDD6555的博客 457

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

线段树 模板之求和

本人水平有限,题解不到为处,请多多谅解 本蒟蒻谢谢大家观看 题目: Problem A: 线段树之Sum Time Limit:1 SecMemory Limit:128 MBSubmit:187Solved:130[Submit][Status][Web Board] Description 给定一数列,规定有两种操作,一是修改某个元素,二是...

167

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

线段树--模板

线段树的命名tree线段树的创建 build线段树的查询 query10月4日的线段树模板(现更新)问题:不够简洁#include&lt;iostream&gt; using namespace std; const int maxind=256; int segTree[maxind*4+10]; int array[maxind]; bool flag=false; inline min(in...

kala0的博客 355

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【模板】线段树

【模板】线段树本篇博文只有模板,emmm。 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩。——摘自百度百科 因此,线段树是一种复杂度极为优秀(

Mashiro_ylb的博客 585

线段树模板(对应洛谷一道线段树模板题)

*最近正好在学线段树,搞懂后写一篇博客记录一下模板,供日后自己学习参考*

MrJinNEU的博客 437

线段树 模板题整理

线段树模板题整理 (基于洛谷OJ) 1.P3372 【模板】线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 kk。 求出某区间每一个数的和。 输入格式 第一行包含两个整数 n, mn,m,分别表示该数列数字的个数和操作的总个数。 第二行包含 nn 个用空格分隔的整数,其中第 ii 个数字表示数列第 ii 项的初始值。 接下来 mm 行每行包含 33 或 44 个整数,表示一个操作,具体如下: 1 x y k:将区间 [x, y][x,y] 内每个数加上 kk。 2

雪岩的博客 2528

线段树[模板]

建树 #define Ln(x) x << 1 #define Rn(x) (x << 1) | 1 struct SegTree{ int l, r, data, lazy; SegTree(int l=0, int r=0, int data=0, int lazy=0): l(l), r(r), data(data), lazy(lazy) {}; }t...

Wtothey_的博客 190

线段树模板+习题

线段树自用模板 #include <iostream> using namespace std; const int MAX_N=10010; int s[MAX_N<<2]; void up(int p) { s[p]=s[p<<1]+s[p<<1|1]; } void modify(int p,int ...

atk006680的博客 344
上一篇: 最大连续子序列
下一篇: 顺序表的初始化、插入、删除
Puppet__
博客等级 码龄9年 319粉丝 328原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值