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

嵌入式设备的switch 以及PHY 芯片调试和选型 (1) 越来越的设备需要多网口的需求,于是需求搭配一个交换机实现网口的扩展。但是很多软件或是硬件工程师在实际选型和应用中经常会遇到一些问题。这里总结一下,避免大家采坑。 几个概念: MAC(介质访问控制),可以理解成数据链路层即可 PHY(物理性),简单理解层转成物理层的连接组件即可 控制接口(MDC/DMIO,I2C,... 阅读详情

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

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;
}
(四)C++自制植物大战僵尸游戏启动流程 鼠标左键单机VS2022上方工具栏中进行项目启动。第一次启动项目需要编译项目中所有代码文件,编译生成需要一定的时间。不同性能的电脑需要消耗的时间差别可能较大,通常在几分钟到几十分钟之间。编译成功后会自动启动运行游戏。qi编译成功后自动启动运行游戏如下图。 阅读详情

相关推荐

基于Multisim的智能交通灯控制系统仿真与实现(含动态闪烁功能)

本文详细介绍了基于Multisim的智能交通灯控制系统仿真与实现,重点解析了动态闪烁功能的电路设计。通过555定时器、74LS192计数器和JK触发器等核心模块,实现了主干道与支干道的交替通行及黄灯1Hz闪烁功能,为交通灯控制系统设计提供了完整的仿真方案。

weixin_29174013的博客 425

线段树(以区间和为例)

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

shiki217_的博客 1694

ROS相机内参标定详细步骤指南

相机标定的目的是为了确定相机内部参数和外部参数,以便修正图像并将图像坐标映射到世界坐标,或者从世界坐标映射到图像坐标。这个过程是计算机视觉和三维感知任务的关键步骤之一,它有以下主要目的: 1. **减小畸变**:相机镜头和传感器可能引入径向和切向畸变,使得图像中的直线变得弯曲或者物体的形状不准确。通过标定相机,可以矫正这些畸变,使图像更准确。

m0_56661101的博客 1万+

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

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

Freeway的博客 1580

Data+AI新玩法:Text2SQL让数据查询变得如此简单!

你是不是也遇到过这种情况?明明手头有海量数据,却因为SQL这道“门槛”,让分析和决策变得复杂和拖沓。你可能想着:“要是我能直接用自然语言和数据库对话,那该多好!你不是一个人在这样想,Text2SQL技术正是为了帮你摆脱这一困境而诞生的。

Ase5gqe的博客 865

洛谷P5707 【深基2.例12】上学迟到(c语言)

第一篇题解 题目描述 yyy 的学校要求早上 8 点前到达。学校到 yyy 的家一共有 s(s\le 10000)s(s≤10000) 米,而 yyy 可以以 v(v<10000)v(v<10000) 米每分钟的速度匀速走到学校。此外在上学路上它还要额外花 10 分钟时间进行垃圾分类。请问为了避免迟到 yyy 最晚什么时候出门?输出 HH:MM 的时间格式,不足两位时补零。由于路途遥远, yyy 可能不得不提前一天出发,不过不可能提前超过一天。 输入格式 两个正整数 s,v,意思已经在题目中给定

cc_love_program的博客 1万+

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

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

偶耶的博客 6143

微信小程序 - [wxapplib]] backgroundfetch privacy fail {“errno”:101,“errMsg”:“private_getBackgroundFetchDa

微信小程序报错之backgroundfetch privacy fail,微信小程序报错WAServiceMainContext.js:1 [wxapplib]] backgroundfetch privacy fail {“errno“:101,怎么解决?问题出现:调用wx.chooseMessageFile报错(开发者工具中正常)用户隐私协议中未声明小程序使用此功能,安卓真机调试报错:backgroundfetch privacy fail ,怎么解决?微信小程序[wxapplib]] backgrou

🏆 前端领域优质创作者 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

《YOLOv8-seg改进》专栏指导书册 &手把手创新教程

学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研;1)手把手教你如何训练YOLOv8-seg;2)模型创新,提升分割性能;3)独家自研模块助力分割;

会AI的学姐 3810

2. Android_逆向的历史与发展

学完本节,希望你能够:了解 Android 逆向工程的发展历程,从早期 APK 破解到现代应用保护;入门先把这几类「在干啥」搞清楚,后面学脱壳、反反调试会顺很多。(反编译 APK 得到的类汇编代码,相当于程序的「菜谱」)就能绕过验证,到后来混淆、加固、反调试一起上,逆向难度越来越高。(第三节 什么是 CPU 指令集),帮你搞清楚「反汇编看到的那些指令」是从哪来的、和 Android 逆向有啥关系。有必要——先搞清「没加固时怎么玩」,再学脱壳和对抗,思路才顺。读起来费劲,但逻辑还在,耐心一点还能跟。

长沙火山 1390

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

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

qq_43569892的博客 900

CMOS 图像传感器——Skipping 和 Binning 模式

Skipping 和 Binning 模式

沧海一升的博客 6004

线段树区间更新求和模板

线段树区间更新求和模板

残阳止水 221

精雕软件(JDpaint) 5.5 绿色版

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

线段树区间更新,区间求和模板 题目链接 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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

#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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

洛谷 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、付费专栏及课程。

余额充值