洛谷 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;
}
量子-经典混合架构与动态QUBO建模 量子-经典混合架构与动态QUBO建模的结合,是当前量子计算与经典计算融合领域的前沿方向。通过将量子计算的并行性与经典计算的灵活性结合,该技术为解决复杂动态优化问题(如实时调度、金融投资组合优化、电力系统控制等)提供了全新的方法论。:将发电机组调度分解为QUBO(启停决策)与非QUBO(功率分配)子问题,通过3块ADMM协调;c_i(t) $随外部环境(如电力需求、市场价格)动态调整。量子-经典混合架构与动态QUBO建模的结合,标志着优化计算从。:每分钟根据市场波动调整QUBO的收益率-风险系数; 阅读详情

相关推荐

量化交易新手入门:从零开始搭建你的第一个Python交易策略(附完整代码)

本文为量化交易新手提供从零开始搭建Python双均线策略的完整指南,涵盖环境配置、数据获取、策略实现及风险管理等关键步骤。通过详细的代码示例和实践建议,帮助读者快速掌握量化交易的核心技术,并避免常见陷阱。文章特别强调Python在量化交易中的技术革新优势,适合希望进入金融科技领域的初学者。

weixin_26905487的博客 443

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

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

u010212352的博客 518

如何在 VMware Workstation 虚拟机中利用 Nvidia 显卡的硬件加速功能

本文详细介绍了在VMware Workstation虚拟机中配置Nvidia显卡硬件加速的完整流程。重点包括:检查硬件兼容性、安装显卡驱动、编辑VMware配置文件启用PCI直通功能(需修改config.ini文件参数)、为虚拟机分配PCI设备等关键步骤。文章特别强调了配置注意事项,如系统资源需求、BIOS设置要求、驱动兼容性等问题,并建议操作前备份数据。通过此方法可实现虚拟机对Nvidia显卡的直接调用,适用于需要GPU加速的计算场景。

qq_39777550的博客 6699

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

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

A.pro的博客 526

Cadence ADE实战:1GHz VCO相位噪声仿真全流程(附PSS/Pnoise避坑指南)

本文详细介绍了在Cadence ADE环境中对1GHz VCO进行相位噪声仿真的完整流程。重点剖析了PSS(周期性稳态分析)和Pnoise(周期性噪声分析)两大核心引擎的关键参数设置与避坑指南,帮助射频与模拟IC设计者准确评估VCO性能,解决仿真不收敛、结果异常等常见问题。

rock5的博客 670

如何利用CN3791实现太阳能电池板对锂电池的高效充电管理

本文详细介绍了如何利用CN3791芯片实现太阳能电池板对锂电池的高效充电管理。CN3791集成了MPPT(最大功率点跟踪)功能,能智能调节太阳能板的输出,确保在不同光照条件下获得最大功率。文章涵盖芯片工作原理、外围电路设计、充电全过程管理及实际应用经验,帮助开发者优化太阳能充电系统效率。

weixin_33709219的博客 499

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

手把手教你用LDR9201芯片DIY高性能Type-C耳机转接头(附电路图)

本文详细介绍了基于LDR9201芯片DIY高性能Type-C耳机转接头的完整实战教程。从芯片选型、电路设计、元器件采购到焊接调试,手把手指导如何打造一个免驱兼容、支持高解析度音频且可通过EEPROM深度定制功能的专属转接头。重点解析了LDR9201作为高度集成的USB音频控制器SoC的优势,并提供了核心电路图与配置指南,适合电子爱好者和硬件开发者实践。

jump7的博客 355

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

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

2301_80252414的博客 608

标签传播算法LPA:半监督学习解决标注数据不足的完整实战指南

在机器学习实际工程中,标注数据稀缺往往是制约模型性能的核心瓶颈。半监督学习提供了一条利用海量未标注数据来增强模型泛化能力的有效路径,其中标签传播算法(Label Propagation Algorithm, LPA)因其直观的图结构和优雅的数学原理而备受关注。LPA通过将样本映射为图中的节点,以相似度作为边权重,让已知标签沿着图结构不断扩散,从而实现对未知样本的预测。其背后基于聚类假设与流形假设,能在低标注率场景下显著缓解过拟合问题,提升分类准确率。该技术在文本分类、金融风控、图像识别等存在大量无标注数据的

weixin_29056781的博客 239

跳蛛优化算法(JSOA)详解:从生物启发到算法实现

摘要: 跳蛛优化算法(JSOA)是一种受跳蛛狩猎行为启发的元启发式优化算法,通过模拟跳蛛的搜索猎物、迫害行为、跳跃捕食和信息素通信四种策略实现高效寻优。算法将跳蛛个体位置映射为候选解,利用物理学模型(匀加速运动、抛射轨迹)和随机策略(柯西分布、信息素机制)平衡全局探索与局部开发。JSOA具有参数少、收敛快的特点,适用于函数优化、路径规划等领域,其生物行为与数学抽象的对应关系(如表1所示)是其核心创新点。

qq_42212808的博客 124

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

ESP32-S3驱动OV3660摄像头原理图设计,已量产

本文重点拆四条主线:多来源输入电源如何收敛到 3V3,摄像头三路供电如何拆分,ESP32-S3 如何接住 DVP 数据流与外部存储,以及音频/补光/传感外围怎样挂到主控边上。至于最终图像帧率、算法策略和软件时序,当前原理图未体现。

不脱发的程序猿 981

【洛谷】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

IEM模型,地表粗糙度模拟

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

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

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

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

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

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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

ityanger的技术栈 2452

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

余额充值