243. 一个简单的整数问题2——差分+树状数组

news2024/9/23 17:18:36

给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一:

C l r d,表示把 A[l],A[l+1],…,A[r] 都加上 d。
Q l r,表示询问数列中第 l∼r 个数的和。
对于每个询问,输出一个整数表示答案。

输入格式
第一行两个整数 N,M。

第二行 N 个整数 A[i]。

接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。

输出格式
对于每个询问,输出一个整数表示答案。

每个答案占一行。

数据范围
1≤N,M≤105,
|d|≤10000,
|A[i]|≤109
输入样例:
10 5
1 2 3 4 5 6 7 8 9 10
Q 4 4
Q 1 10
Q 2 4
C 3 6 3
Q 2 4
输出样例:
4
55
9
15

分析

  1. 此题和上题: 242. 一个简单的整数问题——差分思想+树状数组在查询操作上有点不同,区间修改同样和上题一样,采用tr维护差分数组的前缀和即可;那么区间查询怎么解决呢,可以通过下图的填充构造的方式推出一个式子:(x+1) * ∑(i:1~x) b[i] ∑ (i:1~x) i×b[i];
  2. 所以需要维护两个树状数组,tr1维护差分数组b[i]的前缀和, tr2 维护b[i] * i的前缀和;然后关于sum、add的参数x问题,此题x为索引下标,因为求的前缀和和是以下标区间来找,而 楼兰图腾那个题,x是a[i];注意区分和理解含义;
  3. getSum函数是求a1+a2+…+ax的和,通过结论的式子来计算:区间[1,x]的 tr1的和 - 区间[1,x]的tr2的和;然后在下面通过两个tr作差,求任意区间的a[i]的和:[1,r] - [1,l-1] == [l,r];
  4. 前缀和问题看下数据范围,保险起见可以都加LL;
  5. 下图来自yxc,还有一篇优秀题解可以参考:AcWing 243. 一个简单的整数问题2 作者: 一只野生彩色铅笔;

在这里插入图片描述

#include <bits/stdc++.h>

using namespace std;
typedef long long LL;
const int N = 100010;

int n, m;
int a[N];
LL tr1[N]; //维护差分数组b[i]的前缀和
LL tr2[N]; //维护b[i] * i的前缀和

int lowbit(int x) {
    return x & -x;
}

//tr为指明对哪个前缀和数组做操作,x为索引位置
void add(LL tr[], int x, LL c) {
    for (int i = x; i <= n; i += lowbit(i)) {
        tr[i] += c;
    }
}

//x:为索引下标,因为求的和是以下标区间来找,而楼兰图腾那个题,x是a[i]
LL sum(LL tr[], int x) {
    LL res = 0;
    for (int i = x; i; i -= lowbit(i)) {
        res += tr[i];
    }
    return res;
}

//求a1+a2+...+an的和的结论的式子:区间[1,x]的 tr1的和 - tr2的和
LL getSum(int x) {
    return sum(tr1, x) * (x + 1) - sum(tr2, x);
}

int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
    }
    for (int i = 1; i <= n; ++i) {
        int b = a[i] - a[i - 1];//差分
        add(tr1, i, b);
        add(tr2, i, (LL) b * i);
    }
    while (m--) {
        char op;
        int l, r, d;
        cin >> op >> l >> r;
        if (op == 'Q') {
            //[1,r] - [1,l-1] == [l,r]
            cout << getSum(r) - getSum(l - 1) << endl;
        } else {
            cin >> d;
            // b[l]+d
            add(tr1, l, d);
            add(tr2, l, l * d);
            // b[r+1]-d
            add(tr1, r + 1, -d);
            add(tr2, r + 1, (r + 1) * -d);
        }

    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《爱与自由》豆瓣9.3优秀父母的必读书

《爰和自由》 关于作者 孙瑞雪&#xff0c;中国著名的幼儿教育家与心理学专家&#xff0c;"爱和自由、规则和平等”教育精神的 发起者和倡导者&#xff0c;中国系统引进实施国际蒙特梭利教育第一人&#xff0c;成功实践了科学教育法的本土化。她发展和延伸了蒙特梭利敏感…

Oh My Posh美化CMD、Anaconda Prompt解决方案

网上搜到的Oh My Posh安装配置都是针对power shell的&#xff08;我参考这篇成功配置了针对power shell的字体和主题&#xff09;。期间遇到了无法加载文件WindowsPowerShell\profile.ps1的问题&#xff0c;参考这篇解决。由于平时我用Anaconda比较多&#xff0c;而anaconda是基…

基于ARMR和白噪声特性模型及风速威布尔分布研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

PRISEMI芯导产品推荐 | 支持路径管理功能的3A单节锂离子电池充电IC——PSC2965

PRISEMI芯导产品推荐 | 支持路径管理功能的3A单节锂离子电池充电IC——PSC2965 随着便携式电子设备功能越来越多样化和整机性能的不断提升&#xff0c;整机功耗也在面临越来越大的挑战。最直接有效的方式就是提高电池的容量来提高整机的使用时长。为了不降低用户体验&#xff0…

C# 绘图基础

一 GDI技术简介 ① GDI&#xff1a;Graphics Device Interface. ② GDI&#xff1a;GDI的改进&#xff1b; ③ 是.NET框架结构的重要组成部分&#xff1b; ④ 和GDI一样它提供对二维图形图像的支持&#xff1b; 二 .NET 对GDI的封装 三 坐标系统 GDI的坐标系统&#xff1b; …

计算机毕业设计——简单的网页设计

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

基于粒子群优化算法的分布式电源优化调度实现配电网稳定运行(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

WAYON维安提供新产品:新起点,新征程,DCDC炼成之路

WAYON维安提供新产品&#xff1a;新起点&#xff0c;新征程&#xff0c;DCDC炼成之路 新起点&#xff0c;新征程&#xff0c;DCDC炼成之路 随着新能源汽车、5G通信、工业4.0以及人工智能的快速发展&#xff0c;电源管理芯片的应用场景越来越丰富。同时传统行业&#xff0c;如网…

Day834.Dubbo如何用管程实现异步转同步 -Java 并发编程实战

Dubbo如何用管程实现异步转同步 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于Dubbo如何用管程实现异步转同步的内容。 在很多并发场景下&#xff0c;支持多个条件变量能够让并发程序可读性更好&#xff0c;实现起来也更容易。例如&#xff0c;实现一个阻塞队列&a…

星火计划学习笔记——第八讲Apollo控制模块解析与实践2

文章目录1. Apollo控制框架介绍1.1 控制模块的功能和性能要求1.2 控制模块的总体框架1.3 控制模块的代码结构1.3.1 control -> common 中的主要程序1.3.2 control -> conf 中的主要程序1.3.3 control -> controller 中的主要程序1.3.4 control -> proto 中的主要程…

Android 各镜像文件img详解

Android编译后生成文件&#xff0c;在out/target/product/lime下&#xff1a; cache.img、cust.img、metadata.img、misc.img&#xff08;本地无&#xff09;、recovery.img、super.img、userdata.img、vbmeta.img、vbmeta_system.img&#xff08;仅测试适配工作&#xff0c;而…

Python处理Excel比Vba快100倍,媳妇连连夸赞今晚不用再跪搓衣板----python实战

最近经历了一次把vb脚本改造成python脚本&#xff0c;并获得性能提升数倍的过程&#xff0c;当然&#xff0c;这个过程也不是一帆风顺&#xff0c;中间也经历了一些波折&#xff0c;但是&#xff0c;也收获了一波新的认知。正好最近有时间&#xff0c;姑且写下来记录一下。 什…

水一篇,VB+python实现智能聊天机器人案例

1.分工 理论上单python也能写&#xff0c;但是做gui开发&#xff0c;python要用到thinter库/qt库&#xff0c;稍微麻烦一点。这个案例是python做json截取&#xff0c;VB做gui开发截取json字符。 2.准备工作 编写生成file_controlv2.dll并注册&#xff0c;编写speaker.vbs,准备…

java实现获取当前日期、农历、周

大家好&#xff0c;我是雄雄。 前言 大家先看下面的一段话&#xff1a; 今天是&#xff1a;2022年12月18日&#xff0c;星期日&#xff0c;农历十一月廿五&#xff0c;早安&#x1f31e;&#x1f31e;&#x1f31e; 1.讣告 | 我国著名眼科专家兰绪达在南昌逝世&#xff0c;享…

Linux 多线程(附带线程池代码加注释)

目录 01. Linux线程概念 01.1 什么是线程 01.1.1 轻量级进程ID与进程ID之间的区别 01.1.2 总结&#xff08;重点&#xff09; 01.2 线程的优点 01.3 线程的缺点 01.4 线程异常 01.5 线程用途 02. Linux进程VS线程 02.1 进程和线程 02.2 关于多线程和多进程编程 03…

Pytorch中的卷积与反卷积(conv2d和convTranspose2d)

卷积 卷积是特征提取的常用操作&#xff0c;卷积可以改变图片的通道和大小&#xff0c;相比全连接操作&#xff0c;卷积可以减少计算量&#xff0c;并且充分融合图像的局部特征。 import torch import torch.nn as nnx torch.randn(1,1,4,4) model nn.Conv2d(in_channels1,o…

Spring MVC学习 | 注解配置Spring MVC总结

文章目录一、注解配置Spring MVC1.1 初始化类1.2 Spring MVC配置类1.3 完整配置过程二、总结2.1 常用组件2.2 执行流程学习视频&#x1f3a5;&#xff1a;https://www.bilibili.com/video/BV1Ry4y1574R 一、注解配置Spring MVC 1.1 初始化类 &#x1f511;注解配置的原理 在…

非零基础自学Golang 第10章 错误处理 10.1 错误处理的方式 10.2 自定义错误

非零基础自学Golang 文章目录非零基础自学Golang第10章 错误处理10.1 错误处理的方式10.2 自定义错误10.2.1 错误类型10.2.2 创建错误10.2.3 自定义错误格式第10章 错误处理 我们在编写程序时&#xff0c;为了加强程序的健壮性&#xff0c;往往会考虑到对程序中可能出现的错误…

大数据必学Java基础(一百一十三):监听器概念引入

文章目录 监听器概念引入 一、什么是监听器? 二、监听器怎么分类?

SQL - MySQL深分页

一、MySQL深分页问题 我们在日常开发中&#xff0c;查询数据量比较大的时候&#xff0c;后端基本都会通过前端&#xff0c;移动端传过来的页码&#xff0c;每页数据行数&#xff0c;通过SQL中的 limit 进行分页&#xff0c;如果查询页数比较小的时候&#xff0c;不会出现太大问…