AcWing 243. 一个简单的整数问题2

news2024/9/20 17:22:19

题目描述

题目链接:AcWing 243. 一个简单的整数问题2
给定一个长度为 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 ≤ 1 0 5 10^5 105,
|d| ≤ 10000,
|A[i]| ≤ 1 0 9 10^9 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、最重要的一点,区间修改,所以一定用到差分
2、然后再来看,假设b数组是a数组的差分,那么就很简单地推出
a[1] = b[1]
a[2] = b[1] + b[2]
a[3] = b[1] + b[2] + b[3] …

在此基础上要求a[l] + a[l + 1] + … + a[r],
这种求区间的很直观,使用前缀和解决,即:
a[l] + a[l + 1] + … + a[r] = (a[1] ~ a[r]) - (a[1] ~ a[l - 1])

所以,再找a[1] + a[2] + … + a[x]是多少呢?如图,是所有红色数的和
在这里插入图片描述

我们发现这其实是一个二维的矩阵,通过补齐可以看到:
在这里插入图片描述

此时a[1] + a[2] + a[3] + … + a[x]
= ( n + 1 ) ∗ ∑ 1 x b i − ( b 1 + 2 b 2 + 3 b 3 + . . . + x ∗ b x ) (n + 1) * \sum_1^xb_i - (b_1 + 2b_2 + 3b_3 + ... + x * b_x) (n+1)1xbi(b1+2b2+3b3+...+xbx)
= ( n + 1 ) ∗ ∑ 1 x b i − ∑ 1 x i b i (n + 1) * \sum_1^xb_i - \sum_1^x ib_i (n+1)1xbi1xibi

所以只需维护好 b i b_i bi i b i ib_i ibi的前缀和即可

3、一些问题:
上面二维数组并不是对称的,不可以直接除以2,仔细发现对于每个 b i b_i bi(即每一列中),除了最中间的列,其余列红色和黑色部分的个数都是不一样的

i b i ib_i ibi的维护会麻烦一些,因为变化的是 b i b_i bi,所以记得加减系数
在这里插入图片描述

代码

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
using LL = long long;
const int N = 1e5 + 10;
int n, m;
LL a[N], tr1[N], tr2[N];

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

void add(LL tr[], int x, LL c) {
    for (int i = x; i <= n; i += lowbit(i))
        tr[i] += c;
}

LL query(LL tr[], int x) {
    LL res = 0;
    for (int i = x; i; i -= lowbit(i))
        res += tr[i];
    return res;
}

LL get_sum(int x) {
    return (x + 1) * query(tr1, x) - query(tr2, x);
}

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        int b = a[i] - a[i - 1];
        add(tr1, i, b);
        add(tr2, i, (LL)b * i);    
    }

        
    
    while(m--) {
        char ch;
        LL l, r, d;
        cin >> ch >> l >> r;
        if(ch == 'C') {
            cin >> d;
            // a[l] += d
            add(tr1, l, d), add(tr2, l, l * d);
            // a[r + 1] -= d
            add(tr1, r + 1, -d), add(tr2, r + 1, (r + 1) * -d);
        }else {
            cout << get_sum(r) - get_sum(l - 1) << endl;
        }
    }
    return 0;
}

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

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

相关文章

【5.20】五、安全测试——安全测试工具

目录 5.4 常见的安全测试工具 1. Web漏洞扫描工具——AppScan 2. 端口扫描工具——Nmap 3. 抓包工具——Fiddler 4. Web渗透测试工具——Metasploit 小提示&#xff1a;Kali Linux 5.4 常见的安全测试工具 安全测试是一个非常复杂的过程&#xff0c;测试所使用到的工具也…

自学网络安全/Web安全,一般人我还是劝你算了吧

由于我之前写了不少网络安全技术相关的文章&#xff0c;不少读者朋友知道我是从事网络安全相关的工作&#xff0c;于是经常有人私信问我&#xff1a; 我刚入门网络安全&#xff0c;该怎么学&#xff1f; 要学哪些东西&#xff1f; 有哪些方向&#xff1f; 怎么选&a…

【leetcode】1373. 二叉搜索子树的最大键值和

二叉搜索子树的最大键值和 问题描述问题简单分析提交之旅第一次提交-失败第二次提交-失败第三次提交-成功 问题描述 二叉搜索子树的最大键值和 给你一棵以 root 为根的 二叉树 &#xff0c;请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下&#xff1a; 任意节…

JVM学习(六)

1. JAVA 集合 1.1. 接口继承关系和实现 集合类存放于 Java.util 包中&#xff0c;主要有 3 种&#xff1a;set(集&#xff09;、list(列表包含 Queue&#xff09;和 map(映射)。 1. Collection&#xff1a;Collection 是集合 List、Set、Queue 的最基本的接口。 2. Iterato…

Apple Safari 16.5 发布- macOS 专属浏览器 (独立安装包下载)

Apple Safari 16.5 - macOS 专属浏览器 (独立安装包下载) Safari 浏览器 16 for macOS Montery, Big Sur 请访问原文链接&#xff1a;https://sysin.org/blog/apple-safari-16/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org…

DevOps系列文章-Kubernetes实现CI与CD配置

Kubernetes实现CI与CD配置 一、基本介绍 基于 Kubernetes 实现 CI/CD 配置&#xff0c;其实和往常那些 CI/CD 配置并没有太大区别。都是通过 提交代码&#xff0c;拉取代码&#xff0c;构建代码&#xff0c;发布代码来实现的。 只不过要是通过 K8s 来实现的话&#xff0c;则是…

HNU-计算机系统-讨论课7

选题三 、我们自己来写&#xff0c;太“库”啦 ~ &#xff08; 1 &#xff09; 在 Linux 里用 C 语言进行代码设计&#xff0c;能对某一个班级、某一门 课程、某一名学生的分数进行分析&#xff0c;比如分数段、最高分、最低 分、排名、优势课程等&#xff0c;具体涉及分析…

【计算机系统基础bomb lab】CSAPP实验:Bomb Lab

CSAPP 实验&#xff1a;Bomb Lab 实验内容简述 作为实验目标的二进制炸弹 “Bomb Lab” Linux可执行程序包含了多个阶段(或关卡)&#xff0c;在每个阶段程序要求输入一-个特定字符串&#xff0c;如果输入满足程序代码所定义的要求&#xff0c;该阶段的炸弹就被拆除了&#xf…

基于Zynq的雷达10Gbps高速PCIE数据采集卡方案(二)硬件设计

3.1 引言 采集卡的硬件设计是实现采集功能的基础&#xff0c;良好的硬件设计可以使采集功能更容 易实现&#xff0c;方便软件开发。本章基于第二章的硬件设计方案来详细介绍采集卡硬件设计。 包括载卡和子卡的芯片的选型、配置和具体电路的设计。载卡和子卡的硬件设计总体 …

美联储内部分歧不断加大 妥协方案:6月“跳过”,7月再加

在周五举行的托马斯劳巴赫研究会议上&#xff0c;美联储主席鲍威尔、前主席伯南克一同出席&#xff0c;并对当前的热点政策问题发表了看法。货币政策&#xff0c;自然是备受关注的议题。 凭借研究“银行和金融危机”荣获2022年诺贝尔经济学奖的伯南克表示&#xff0c;银行业危机…

Linux文件与目录管理笔记1

鸟哥私房菜笔记 这里写目录标题 常用文件命令cd,pwd,mkdir,rmdir 执行文件的路径的变量:$PATHls,cp,rm,mv 文件内容查看指令(cat,tac,nl)可翻页查看(more,less)More(一页一页翻动)less 数据截取&#xff08;head,tail&#xff09;非纯文本文件&#xff1a;od 常用文件命令 cd…

lwIP:宏 LWIP_TCPIP_CORE_LOCKING(内核锁定)

从 lwIP-2.0.0 开始&#xff0c;在 opt.h 中多了一个宏开关 LWIP_TCPIP_CORE_LOCKING&#xff0c;默认使能。这个宏是启用内核锁定功能的。 本文探索这个宏的前世今生。 2007 年 5 月 24 日&#xff0c;Simon Goldschmid &#xff08;以下简称 西蒙 &#xff09;提交了一个任务…

DriveAct:用于自动驾驶汽车细粒度驾驶员行为识别的多模态数据集

Drive&Act&#xff1a;A Multi-modal Dataset for Fine-grained Driver Behavior Recognition in Autonomous Vehicles 摘要1. 简介2. 其它驾驶员动作数据集3. Drive&Act数据集3.1 数据采集3.2 记录的数据流传感器设置和视频流3D Body Pose3D Head PoseInterior ModelA…

接口优化技巧汇总

1.批处理 批量思想&#xff1a;批量操作数据库&#xff0c;这个很好理解&#xff0c;我们在循环插入场景的接口中&#xff0c;可以在批处理执行完成后一次性插入或更新数据库&#xff0c;避免多次IO。 //批量入库 batchInsert();2.异步处理 异步思想&#xff1a;针对耗时比较…

短视频去水印接口 支持各短视频平台去水印 快速稳定

短视频去水印接口 支持各短视频平台去水印&#xff0c;抖音、快手、微视、西瓜等。 快速稳定 不限次 免费测试 接口开发文档 返回格式&#xff1a; JSON 请求方式&#xff1a; GET/POST 请求示例&#xff1a; 请求参数说明&#xff1a; 字段必填类型说明url是String短视…

听说你想成为一名6的飞起的黑客,这些资料怎么能少

重点提醒&#xff1a;本项目工具来源于互联网&#xff0c;是否含带木马及后门请自行甄别&#xff01;&#xff01;Hvv来即&#xff0c;请大家提高警惕&#xff01;&#xff01;&#xff01; 受限于篇幅原因&#xff0c;无法全部展示&#xff0c;如果你需要的话&#xff0c;可以…

【正点原子STM32连载】 第十章 STM32CubeMX简介 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十章…

教你精通Java语法之第十四章、枚举

目录 一、背景及定义 二、使用 2.1switch语句 2.2常用方法 三、枚举优点缺点 四、枚举和反射 4.1枚举是否可以通过反射&#xff0c;拿到实例对象呢&#xff1f; 五、总结 六、面试问题 一、背景及定义 枚举是在JDK1.5以后引入的。主要用途是&#xff1a;将一组常量组织…

触发器章节小结

触发器&#xff08;Flip Flop&#xff09; 4.1 SR锁存器&#xff08;Set-Reset Latch&#xff09; 4.1.1 或非门构成的SR锁存器 SD称为置位端或置1输入端&#xff1b; RD称为复位端或置0输入端。 当SD 1、RD 0时,Q1、Q’0。在SD 1信号消失以后&#xff08;即SD 回到0)&#…

AI绘画-Midjourney基础1-突破想象的界限:掌握文本引导的图像生成技巧

Midjourney是一款 AI 绘画工具&#xff0c;可以根据你的提示&#xff08;本文中称为 prompt&#xff09;创作出各种图像。你只需要在Discord上和一个机器人聊天&#xff0c;就可以用简单的命令来控制它。目前已不支持免费试用&#xff0c;可以选择付费计划来获得更多功能和优势…