(模板)线段树 (区间更新,区间求和)

手机拍照背后的隐形功臣:一文读懂高通ISP三兄弟(IFE/BPS/IPE)如何协同工作 本文深入解析了高通ISP三兄弟(IFE/BPS/IPE)在手机拍照中的协同工作机制。通过拟人化比喻,详细介绍了IFE作为图像前端引擎的分流预处理、BPS作为RAW格式修图师的专业处理,以及IPE作为全能后期制作人的多面功能,揭示了三者在图像处理pipeline中的高效配合与技术创新。 阅读详情

已知一个数列,你需要进行下面两种操作:

1.将某区间每一个数加上x

2.求出某区间每一个数的和(参见洛谷P3372)
后面query和update的部分一定要小心begin,end和left,right不要弄混了。
可以认为left和right在整个程序中都是在代表一个范围

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=100010;
int array1[maxn];
struct node1{
    ll sum,addmark;
}Node[maxn<<2];
void pushup(int node)
{
    Node[node].sum=Node[node<<1].sum+Node[node<<1|1].sum;
}
void buildtree(int node,int left,int right)
{
    Node[node].addmark=0;
    if(left==right){
        Node[node].sum=array1[left];return;
    }
    int m=(left+right)>>1;
    buildtree(node<<1,left,m);
    buildtree(node<<1|1,m+1,right);
    pushup(node);
}
void pushdown(int node,int left,int right)
{
    if(Node[node].addmark){
        int m=(left+right)>>1;
        Node[node<<1].addmark+=Node[node].addmark;
        Node[node<<1|1].addmark+=Node[node].addmark;
        Node[node<<1].sum+=(m-left+1)*Node[node].addmark;
        Node[node<<1|1].sum+=(right-m)*Node[node].addmark;
        Node[node].addmark=0;
    }
}
ll query(int node,int begin,int end,int left,int right)
{
    if(left<=begin&&right>=end)
        return Node[node].sum;
    pushdown(node,begin,end);
    int m=(begin+end)>>1;//小心!!
    ll ans=0;
    if(left<=m)
        ans+=query(node<<1,begin,m,left,right);
    if(right>m)
        ans+=query(node<<1|1,m+1,end,left,right);
    return ans;
}
void update(int node,int add,int begin,int end,int left,int right)
{
    if(begin>=left&&end<=right){
        Node[node].sum+=(end-begin+1)*add;
        Node[node].addmark+=add;return;
    }
    int m=(begin+end)>>1;//小心!!
    pushdown(node,begin,end);
    if(left<=m)
        update(node<<1,add,begin,m,left,right);
    if(right>m)
        update(node<<1|1,add,m+1,end,left,right);
    pushup(node);
}
int main()
{
    int n,m,i,j,k;
    cin>>n>>m;
    for(i=1;i<=n;i++)
        scanf("%d",&array1[i]);
    buildtree(1,1,n);
    for(i=1;i<=m;i++){
        int a,b,c,d;
        scanf("%d",&a);
        if(a==1){
            scanf("%d%d%d",&b,&c,&d);
            update(1,d,1,n,b,c);
        }
        else{
            scanf("%d%d",&b,&c);
            printf("%lld\n",query(1,1,n,b,c));
        }
    }

    return 0;
}
微观交通流仿真软件:SUMO (Simulation of Urban MObility)_(1).SUMO入门与基础概念 SUMO(Simulation of Urban MObility)是一个开源的微观交通流仿真软件,用于模拟城市交通系统中的各种动态行为。SUMO不仅可以模拟车辆的行驶,还可以模拟行人、自行车、公交车等交通参与者的运动。通过SUMO,研究人员和工程师可以对交通系统进行详细建模和分析,从而优化交通规划、评估交通政策和设计智能交通系统。车辆路径规划:SUMO可以模拟车辆在路网中的路径选择,包括动态路径选择和静态路径选择。交通信号控制:支持多种交通信号控制策略,包括固定时间控制、自适应控制等。多模式交通:模拟不同 阅读详情

相关推荐

FDTD Script命令学习-farfield3d/farfieldux/farfielduy

介绍了farfield3d/farfieldux/farfielduy命令功能,及不同应用语法和参数介绍,以及对官网示例进行介绍。

jxxl_1314的博客 3098

线段树(以区间和为例)

​ 线段树的根节点是一个长区间,例如输入不超过N个的数,那么可以将根节点设为[1,N],它的左右子节点为均分父节点的两个区间,即左半区间和右半区间1⌊N12⌋⌊N12⌋1N1⌊2N1​⌋][⌊2N1​⌋1N,依次递归地建立,直到叶子节点,即区间ii[i,i]ii。

shiki217_的博客 1694

coreldraw sp2精简版 x4_CorelDRAW X4下载-CorelDRAW X4 SP2 精简版_Win10镜像官网

CorelDRAW X4 SP2是一个专业图形设计软件,专用于矢量图形编辑与排版,借助其丰富的内容和专业图形设计、照片编辑和网站设计软件,您将能够随心所欲地表达自己的风格与创意,轻松创作徽标标志、广告标牌、车身贴和传单、模型绘制、插图描画、排版及分色输出等。CorelDRAW X4 SP2软件特色CorelDraw X4 相比两年前的 CorelDraw X3 加入了大量新特性,总计有50项以上,...

weixin_30346025的博客 8894

树状数组 区间更新 区间求和

树状数组天生用来动态维护数组前缀和,其特点是每次更新一个元素的值,查询只能查数组的前缀和, 但这个题目求的是某一区间的数组和,而且要支持批量更新某一区间内元素的值,怎么办呢?实际上, 还是可以把问题转化为求数组的前缀和。           首先,看更新操作update(s, t, d)把区间A[s]...A[t]都增加d,我们引入一个数组delta[i],表示 A[i]...A[n]的

Freeway的博客 1580

ECB oracle——attack

基于ECB oracle的攻击方案前言什么是ECB方案步骤1.确定块大小和明文大小2.暴力破解求明文脚本代码 前言 参考文章:Breaking ECB by prepending your own message. 环境地址:ECB oracle 什么是ECB 分组密码中AES的一种模式(其他还有:CBC、ECB、CTR、OCF、CFB)如图每一块加密是分开的。 方案步骤 1.确定块大小和明文大小 先用一个字符"a"去encrypt返回32个字节的数据(64位16进制)依次用"aa",“aaa”…去en

weixin_44617902的博客 1311

数据产品需求文档(PRD)怎么写?阿里P8分享的模板+5个避坑点

作用:记录文档的版本、作者、评审信息,避免“文档混乱”。填写规范字段说明示例文档名称清晰反映产品名称,如“用户行为分析平台PRD”用户行为分析平台PRD_V1.0文档版本用“版本号+日期”,如V1.0_20240301编写人数据产品经理姓名+联系方式张三(138-XXXX-XXXX)评审人员业务负责人、开发经理、数据分析师、运维负责人李四(业务)、王五(开发)、赵六(数据)、周七(运维)评审时间评审日期2024-03-05评审意见。

架构师的AI之路,分享AI应用开发架构的学习与实践。 1574

zkw线段树:高效的单点/区间修改+查询(原理+扩展技巧)

出处:清华大学 张昆玮(zkw) - ppt《统计的力量》 重口味线段树不仅比普通线段树速度快、空间小,而且码量小得多,循环结构思路也很清晰,很适合用来优化Dijkstra和套在树剖以及树套树上。

偶耶的博客 6143

信号完整性仿真SI之Cadence Sigrity SPEED2000_眼图仿真(四)

今天给大家分享一个仿真的操作流程,是关于Cadence Sigrity SPEED2000的时域波形仿真和眼图仿真。我们会经常看见硬件工程师调试示波器上的一些信号的波形变化,其实这些也可以通过仿真电路的搭建来做出投板前的仿真,来优化走线,以减少版本的迭代次数。如果要和实际的信号保持一致,就要求仿真设置的参数和实际的参数保持一致,这也是仿真的重点和难点。下面先让我们了解一下Cadence Sigrity SPEED2000时域仿真的操作流程: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的

刘小同学的博客 1万+

【高级数据结构】线段树 | 求区间和

线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 用于数组的区间求和,且数组内的元素可能改变。 对于数组 arr = {1,2,3,4,5,6,6,7,…} 而言,要求得 i~j 下标数据的和,我们需要对数组进行遍历。时间复杂度O(n)。而修改数组中某个元素的值,时间复杂度为O(1)。 我们可以使用一个 sum_arr 前缀和数组来保存 0~i 位置的和,这样以来,求 i~j 的区间和等同于 arr[j] - arr[i-1]。 时间复杂度为 O(

专注于C/C++/Linux领域创作 942

[QMT和ptrade量化交易小白入门]-112、小市值热点概念交易策略,回测5年20倍

本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1079

PTP(确时间协议,Precision Time Protocol)时间同步

主时钟定期发送带预估发送时间 t1 的报文(若支持硬件时间戳,实际 t1​ 由后续的Follow_Up报文携带)。所有设备启动后通过协商选举出唯一主时钟(Grandmaster),其余设备自动成为从时钟(Slave)。:从时钟记录接收时间 t2,随后向主时钟发送Delay_Req并记录发送时间 t3​。若使用支持PTP的交换机,可修正报文在交换机内的驻留时间,进一步提升精度。从时钟根据offset调整本地时钟,实现与主时钟同步。动态调整本地时钟,抵消传输延迟和时钟漂移。(或通过BMCA自动当选)。

努力努力努力 1303

线段树常用案例1——区间求和

本篇博客在上一篇博客基础上讲解,链接:线段树 引例 来看一道题目:A Simple Problem with Integers 这道题的题意是给定一个大小为N的数组,现在每次对数组进行以下两种操作中的一种: 如果是Q,输入a,b,则求区间[a,b]的元素和 如果是C,输入a,b,c,则对区间[a,b]中的每个元素进行加c操作 首先如果只是区间求和查询操作比较好处理,在构造线段树的时候预先求和即可,但题目关键在于对于一段区间的元素进行更新之后的区间求和。 如果我们每次的更新操作都处理到叶子结点,那

qq_43569892的博客 900

《基于FPGA的数字信号处理》专栏的导航与说明

《基于FPGA的数字信号处理》专栏的导航与说明

孤独的单刀 4160

线段树区间更新求和模板

线段树区间更新求和模板

残阳止水 221

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

线段树模板——区间更新加区间求和

线段树区间更新,区间求和模板 题目链接 POJ-3468 You have N integers, A1, A2, … , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. ...

SCUEC__zhazhahui的博客 354

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

线段树模板(区间求和+区间最大/小值+区间更新+单点更新)

#include<iostream> #include<string> #define LL long long #define MAX 200010 using namespace std; int tree[MAX<<2]; // 线段树 int lazy[MAX<<2]; // 延迟标记。都要4倍空间 //lazy数组设置的目的:如果我要求...

qq_40409416的博客 403

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

洛谷 2068 线段树模板:单点更新,区间求和

洛谷 2068 线段树模板:单点更新,区间求和#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn = 100000; int a[maxn],n,m,ta,tb; char tt; struct node { int sum,l,r; }t[maxn

yu0046的博客 362

P3372 【模板】线段树 1线段树区间更新加法+区间求和

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

qq_45891413的博客 210

线段树--单点更新,区间求和模板

线段树学习建议视频:https://www.bilibili.com/video/av47331849 public class main { //建线段树 public static void buildTree(int arr[],int tree[],int node,int start,int end){ if(start==end){ tree[node]=arr...

点点滴滴 245

POJ 3468 线段树区间更新求和模板

A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 75854   Accepted: 23373 Case Time Limit: 2000MS Description You have N i

弱智就要多努力 1780

线段树入门——区间求和,区间更新(模板)

线段树入门 区间求和,区间更新。 题目链接:https://cn.vjudge.net/problem/POJ-3468 #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; const int maxn=100000; const int max...

weixin_30357231的博客 154

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

  题目连接及大佬连接 ///修改点,更新区间求和 模板 /*算是第一篇敲这个模板吧,注释标准*/ #include&lt;cstdio&gt; #include&lt;cstring&gt; using namespace std; const int maxn=50000+5; //线段树需要维护的信息 int sum[maxn*4]; #define lson i*2, l, m ...

Sean 229

线段树模板--区间更新--区间求和

基本操作: 对区间[a,b]全部加c; 对区间[a,b]求和; #include<iostream> #include<cstdio> #define ll long long #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1 | 1 using namespace st...

queque_heiya的博客 839

# 线段树模板——单点更新加区间求和

线段树模板——单点更新加区间求和 -模板所用题目链接:[HDU-1196 排兵布阵] (http://acm.hdu.edu.cn/showproblem.php?pid=1166) 题目描述 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy...

SCUEC__zhazhahui的博客 275

线段树模板--区间更新+区间求和

题目链接: http://poj.org/problem?id=3468 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define LL long long 5 using namespace std; 6 const int ma...

weixin_30687587的博客 109

线段树经典操作模板(单点更新,替换;区间更新,替换;区间求和求最值)

对于线段树的讲解此篇不再赘述,下面列出线段树应用中最常用的几种操作的代码。(具体题目未贴出,仅供有一定基础者参考代码风格) 另外,注意多组输入要写scanf("%d%d",&n,&m)!=EOF,线段树的题肯定要用c语言的输入输出,要使用字符数组,不用字符串,输入字符的时候要加getchar()吞噬空行.. (1)单点增减,区间求和: #include #include #include #

NK_test的博客 3638
上一篇: 洛谷P3980
下一篇: (模板)线段树(区间双重更新,区间求和)
HumveeA6
博客等级 码龄17年 12粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值