洛谷 P3368 【模板】树状数组 2

题解:洛谷 P3368 【模板】树状数组 2 等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。,分别表示该数列数字的个数和操作的总个数。输出包含若干行整数,即为所有操作。个用空格分隔的整数,其中第。#普及+# #树状数组#本文分享的必刷题目是从。 阅读详情

【模板】树状数组 2

题目描述

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

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

  2. 求出某一个数的值。

输入格式

第一行包含两个整数 NNN、MMM,分别表示该数列数字的个数和操作的总个数。

第二行包含 NNN 个用空格分隔的整数,其中第 iii 个数字表示数列第 $i $ 项的初始值。

接下来 MMM 行每行包含 222 或 444个整数,表示一个操作,具体如下:

操作 111: 格式:1 x y k 含义:将区间 [x,y][x,y][x,y] 内每个数加上 kkk;

操作 222: 格式:2 x 含义:输出第 xxx 个数的值。

输出格式

输出包含若干行整数,即为所有操作 222 的结果。

样例 #1

样例输入 #1

5 5
1 5 4 2 3
1 2 4 2
2 3
1 1 5 -1
1 3 5 7
2 4

样例输出 #1

6
10

数据规模与约定

对于 30%30\%30% 的数据:N≤8N\le8N≤8,M≤10M\le10M≤10;

对于 70%70\%70% 的数据:N≤10000N\le 10000N≤10000,M≤10000M\le10000M≤10000;

对于 100%100\%100% 的数据:1≤N,M≤5000001 \leq N, M\le 5000001≤N,M≤500000,1≤x,y≤n1 \leq x, y \leq n1≤x,y≤n,保证任意时刻序列中任意元素的绝对值都不大于 2302^{30}230。

思路

对于区间修改和单点查询,可以使用树状数组差分的策略。区间修改[x,y][x,y][x,y],使用差分即 change(x,k),change(y+1,−k)change(x,k),change(y+1,-k)change(x,k),change(y+1,−k);单点查询 xxx ,其值即为 a[x]+query[x]a[x]+query[x]a[x]+query[x] (修改前的原值 + 多次修改所造成的改变量)。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxn = 5e5 + 6;

int n, m; // n为数组大小,m为询问个数

int a[maxn]; // 原数组
int s[maxn]; // 树状数组

int lowbit(int x) // 获取低位2次幂数
{
    return x & -x;
}

void change(int x, int k) // 单点修改
{
    while (x <= n)
    {
        s[x] += k;
        x += lowbit(x);
    }
}

int query(int x) // 前缀和查询
{
    int res = 0;
    while (x)
    {
        res += s[x];
        x -= lowbit(x);
    }
    return res;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> m;

    int x, y, k, op;

    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }

    while (m--)
    {
        cin >> op;
        if (op == 1)
        {
            cin >> x >> y >> k;
            // 差分
            change(x, k);
            change(y + 1, -k);
        }
        else
        {
            cin >> x;
            cout << a[x] + query(x) << '\n'; // 原值加上变化的值
        }
    }

    return 0;
}
游程理论提取灾害事件特征V2---基于MATLAB语言的编程实现 游程理论,灾害事件,MATLAB 阅读详情

相关推荐

自定义css属性实现渐变边框动画

自定义cs属性实现渐变边框动画

lemon的博客 1875

P3368 【模板】树状数组 2 (详解

P3368 【模板】树状数组 2 的详解

u010212352的博客 518

Sentaurus TCAD 修改字体

如题

努力学习的IC小白 5760

[洛谷]P3368 【模板】树状数组 2 (#树状数组+差分)

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

A.pro的博客 526

2019年电赛D题《简易电路特性测试仪》全过程

2019年全国大学生电子设计大赛D题《简易电路特性测试仪》硬件部分及故障分析

zzhao2580的博客 5万+

Linux 下 OpenClaw 安装全记录:从零到一的保姆级图文教程

本文主要介绍了Linux 下 OpenClaw 安装全记录:从零到一的保姆级图文教程,希望能对学习使用OpenClaw 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程 2.1 步骤一 安装Node.js 2.2 步骤二:安装git 2.3 步骤三:安装并配置OpenClaw 2.4 步骤四:配置OpenClaw 2.5 步骤五:配置模型 2.6 步骤六:对话 3. 后续使用步骤 4. 报错解决方案 5. OpenClaw的卸载

weixin_43178406的博客 10万+

51nod 3071 线段树练习2

51nod 3071 线段树练习2 题目 你需要维护一个长为 n 的序列,支持 m 个操作: 区间修改为一个数 查询一个区间中的最大子段和,即和最大的子区间的值 数据范围: 对于 30% 的数据:n≤8,m≤10。 对于 70% 的数据:n≤1000,m≤10000。 对于 100% 的数据:1≤n, m≤100000。 保证任意时刻数列中任意元素的和在int范围内。 输入格式: 第一行包含两个整数 n, m,分别表示该数列数字的个数和操作的总个数。 第二行包含 n 个用空格分隔的整数,其中第

uhohstinky的博客 246

超声波传感器(CHx01) 学习笔记 Ⅲ-API介绍

超声波传感器(CHx01) API介绍

nicole088的专栏 1386

洛谷p3368【模板】树状数组2

【代码】洛谷p3368【模板】树状数组2。

2301_80252414的博客 608

【Autosar从入门到精通到进阶实战篇】75 0x34/0x36/0x37:请求下载、传输数据、请求退出——刷写流程的“三兄弟”

文章摘要:UDS刷写流程0x34/0x36/0x37关键实现要点 本文通过一个真实ECU变砖案例,揭示了UDS刷写服务(0x34请求下载、0x36传输数据、0x37请求退出)的实现陷阱与最佳实践。核心要点: 安全架构设计: 0x34阶段只协商参数,不立即擦除Flash 采用缓冲区暂存数据,避免频繁写Flash 严格检查地址对齐和内存边界 关键改进措施: 实现数据包序列号校验(防错位) 传输层缓冲区溢出保护 0x37阶段必须包含完整性校验(如CRC32) 一次性批量写入Flash,减少擦写次数 典型错误模式:

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 70

华为od 面试八股文_Python_05_含答案

华为od 面试八股文_Python_05_含答案

MISAYAONE的博客 2560

P3368 【模板】树状数组 2

https://www.luogu.com.cn/problem/P3368 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数数加上xx; 求出某一个数的值。 输入格式 第一行包含两个整数NN、MM,分别表示该数列数字的个数和操作的总个数。 第二行包含NN个用空格分隔的整数,其中第ii个数字表示数列第ii项的初始值。 接下来MM行每行包含22或44个整数,表示一个操作,具体如下: 操作11: 格式:1x y k含义:将区间[x,y][...

代码笔记本 349

SAP ABAP CDS View 里的日期函数

摘要:本文系统介绍了ABAP CDS日期函数在企业级应用中的关键作用,包括账龄计算、合同续期等业务场景。重点解析了DATS_IS_VALID、DATS_DAYS_BETWEEN等核心函数的语义和使用边界,特别强调on_error四种异常处理策略的选择逻辑。针对系统日期获取,对比了经典CDS的参数注入和View Entity会话变量两种方式。文章还提供了完整可运行的示例代码(包含CDS视图和ABAP程序),帮助开发者快速验证不同版本下的函数行为差异,确保在实际项目中正确应用这些日期处理函数。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 379

【洛谷】P3368 【模板】树状数组 2

题目地址: https://www.luogu.com.cn/problem/P3368 树状数组的应用。题目要求已知一个数组,回应以下两种操作: 1、将某一区间[a,b][a,b][a,b]每个数都增加xxx 2、求某位置aaa的数值 这两个操作容易让人想到差分数组,因为差分数组对操作1的效率很高,是O(1)O(1)O(1)。例如对于数组[1,5,4,2,3][1,5,4,2,3][1,5,4,...

数学、算法爱好者的博客 331

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

洛谷:P3368 【模板】树状数组 2 Java题解

题目要求实现一个支持区间修改和单点查询的数据结构。树状数组结合差分技术是解决这类问题的理想选择,因为它可以在O(log n)时间内完成区间更新和单点查询。该实现能够高效处理题目给定的最大数据规模(n,m ≤ 500000)。对于更大的数据规模,可以考虑进一步优化IO处理或使用更高效的数据结构。:O(n),用于存储树状数组和原始数组。• 区间更新:O(log n)• 单点查询:O(log n)

Java爱好者,热爱分享,信仰开源! 411

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

洛谷 - P3368[模板]树状数组2

题目链接:https://www.luogu.org/problemnew/show/P3368 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入格式 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含2或4个整数,表...

ityanger的技术栈 2452

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

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

洛谷——P3368 【模板】树状数组 2

https://www.luogu.org/problem/show?pid=3368 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下...

agcozdwdfvds08078的博客 116

【模板】树状数组 2(洛谷-P3368)

题目约定元素的绝对值不大于2^30(逼近int的极限 2^31−1)。树状数组C[i]存储的是多个差分值的叠加,且后续有多次区间累加操作,有概率在中途计算时爆int产生负数。全员上long long更优。当修改区间右端点y=N时,会访问到N+1的位置。如果数组只开了刚好500000,就会越界。数组大小务必多开个10到15的余量(如500015百万级别的输入输出,不要直接使用cin/cout,要配合ios::sync_with_stdio(false);cin.tie(0);不要使用endl。

布心老混子 所有代码均老混子本人远古手搓 易错点均为学生真实场景 博客文章部分借助ai生成 845

洛谷 P3368:【模板】树状数组 2 ← 差分

树状树状的“区间更新”操作,通常指将区间 a[i] ~ a[j] 中的每个元素都加 k。 树状数组的‌“区间更新”操作通常通过‌差分数组‌实现,核心思想是将“区间更新”转化为两次“单点更新”。原因在于树状数组的经典操作是“单点更新、区间查询”,那么在遇到“将区间 a[i] ~ a[j] 中的每个元素都加 k,输出第 x 个数的值”等“区间更新、单点查询”的问题时,就需要利用差分的思想,将“区间更新、单点查询”问题转换为树状数组擅长的“单点更新、区间查询”问题后进行求解。

hnjzsyjyj的专栏 346

洛谷P3368 【模板】树状数组 2

洛谷P3368 【模板】树状数组 2

蒟蒻Sure的博客 905

洛谷P3368 【模板】树状数组 2 [差分思想]

链接:P3368 这里需要首先知道差分思想的利用 如果有一个数组为 a[5]={1,4,3,2,5}; 那么则他的差分数组为 b[5]={1,3,-1,-1,3} 我们这里可以发现 对于任意的Ai 他的值就等于B1+B2+…+Bi 那么我们便可以利用这个思想 来进行区间同时加一个数 若现在我们要在[x,y]进行同时加上一个数k 那么我们便可以利用差分数组b 在b[x]的地方加上k 在b[y+1]...

秃头交易站. 261

洛谷 P3374【模板】树状数组1、P3368【模板】树状数组2

P3374【模板】树状数组1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某一个数加上 xxx 求出某区间每一个数的和 输入格式 第一行包含两个正整数 n,mn,mn,m ,分别表示该数列数字的个数和操作的总个数。第二行包含 nnn 个用空格分隔的整数,其中第 iii 个数字表示数列第 iii 项的初始值。 接下来 mmm 行每行包含 333 个整数,表示一个操作,具体如下: 1 x k 含义:将第 xxx 个数加上 kkk 2 x y 含义:输出区间 [x,y][x,y][x,y] 内

memcpy0的博客 733

洛谷 P3368 【模板】树状数组 2 区间修改 单点查询

洛谷 P3368 【模板】树状数组 2 区间修改 单点查询 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数数加上 x; 求出某一个数的值。 输入格式 第一行包含两个整数 N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含 N 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。 接下来 M 行每行包含 2 或 4个整数,表示一个操作,具体如下: 操作 1: 格式:1 x y k 含义:将区间 [x,y] 内每个数加上 k; 操作 2: 格式:2 x 含义:输

weixin_46283740的博客 327

洛谷p3368树状数组模板2

#include<bits/stdc++.h> using namespace std; int a[500005]; int t1[500005],t2[500005]; int n,m; int lowbit(int x){ return x & -x; } void add(int x,int k){//t1,t2数组的加减; int v1 = x * k; while(x <= n){ t1[x] += k; t2[x] += v1; x += lowb.

qqqingyi的博客 214
上一篇: 洛谷 P3374 [模板] 树状数组 1
下一篇: 洛谷 P3810 【模板】三维偏序(陌上花开)
bbc_ouo
博客等级 码龄3年 2096粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值