题目描述

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

  1. 将某区间每一个数加上 kkk
  2. 求出某区间每一个数的和。

输入格式

第一行包含两个整数 n,mn, mn,m,分别表示该数列数字的个数和操作的总个数。

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

接下来 mmm 行每行包含 333444 个整数,表示一个操作,具体如下:

  1. 1 x y k:将区间 [x,y][x, y][x,y] 内每个数加上 kkk
  2. 2 x y:输出区间 [x,y][x, y][x,y] 内每个数的和。

输出格式

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

输入输出样例 #1

输入 #1

5 5
1 5 4 2 3
2 2 4
1 2 3 2
2 3 4
1 1 5 1
2 1 4

输出 #1

11
8
20

说明/提示

对于 15%15\%15% 的数据:n≤8n \le 8n8m≤10m \le 10m10
对于 35%35\%35% 的数据:n≤103n \le {10}^3n103m≤104m \le {10}^4m104
对于 100%100\%100% 的数据:1≤n,m≤1051 \le n, m \le {10}^51n,m105ai,ka_i,kai,k 为正数,且任意时刻数列的和不超过 2×10182\times 10^{18}2×1018

【样例解释】

solution

线段树是一种常用的数据结构,实现区间查询和区间修改,时间和空间复杂度都是O(nlogn)O(nlogn)O(nlogn)
其基本原理是用一个二叉树点维护一个区间的数据,然后它的两个字节点各负责半个区间,将统计信息汇总给该节点

代码

#include <sstream>
#include "iostream"
#include "cmath"
#include "vector"
#include "algorithm"using namespace std;
const int N = 1e5 + 5;int n;
long long b[N];struct node {long long sum, tag;
} a[4 * N];// 将父节点的 tag 信息向下分摊
void push_down(int rt, int l, int r) {int m = r + l >> 1;a[rt * 2].sum += a[rt].tag * (m - l + 1);a[rt * 2].tag += a[rt].tag;a[rt * 2 + 1].sum += a[rt].tag * (r - m);a[rt * 2 + 1].tag += a[rt].tag;a[rt].tag = 0;
}void push_up(int rt) {a[rt].sum = a[rt * 2].sum + a[rt * 2 + 1].sum;
}void build(int rt, int l, int r) {a[rt].tag = 0;if (l == r) {a[rt].sum = b[l];return;}int m = l + r >> 1;build(rt * 2, l, m);build(rt * 2 + 1, m + 1, r);push_up(rt);
}void update(int rt, long long k, int l, int r, int L, int R) { // l, r 是 rt管理的区间, L R是修改的区间, k 是修改的量// 整个区间都要增加kif (L <= l && r <= R) {a[rt].sum += (r - l + 1) * k;a[rt].tag += k;return;}push_down(rt, l, r); // tag 向下传递int m = l + r >> 1;if (L <= m) update(rt * 2, k, l, m, L, R);if (R > m) update(rt * 2 + 1, k, m + 1, r, L, R);push_up(rt); // sum 向上汇总
}long long query(int rt, int l, int r, int L, int R) {// 整个区间都要if (L <= l && r <= R) {return a[rt].sum;}push_down(rt, l, r);int m = l + r >> 1;long long s = 0;if (L <= m) s += query(rt * 2, l, m, L, R);if (R > m) s += query(rt * 2 + 1, m + 1, r, L, R);return s;
}int main() {int m;cin >> n >> m;for (int i = 1; i <= n; i++) cin >> b[i];build(1, 1, n);for (int i = 0; i < m; i++) {int op, l, r;long long k;cin >> op >> l >> r;if (op == 1) {cin >> k;update(1, k, 1, n, l, r);} else {cout << query(1, 1, n, l, r) << endl;}}}

结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flink写paimon表的过程解析

背景 apache paimon是构建湖仓一体的重要组成部分&#xff0c;由于paimon的写入速度很快&#xff0c;通过flink进行数据写入是很自然的选择&#xff0c;本文就介绍下使用flink写入paimon的两阶段协议的大概逻辑 技术实现 flink通过两阶段协议写入paimon表&#xff0c;分成三个步…

迅为RK3568开发板OpeHarmony学习开发手册-点亮 HDMI 屏幕

OpenHarmony 源码中默认支持 HDMI 屏幕&#xff0c;但是默认的分辨率是采用 mipi 的分辨率&#xff0c;我们修改代码&#xff0c;关闭 MIPI 就可以正常显示了。在之前视频修改的基础上&#xff0c;修改/home/topeet/OH4.1/OpenHarmony-v4.1-Release/OpenHarmony/out/kernel/src…

北京理工大学医工交叉教学实践分享(1)|如何以实践破解数据挖掘教学痛点

如何有效提升医工交叉领域数据挖掘课程的教学效果&#xff1f;近日&#xff0c;北京理工大学医学技术学院辛怡副教授在和鲸组织的分享会上&#xff0c;系统介绍了其团队在《数据挖掘在生物医学中的应用》课程中的创新实践&#xff0c;为解决普遍教学痛点提供了可借鉴的“平台化…

Vue 3 入门教程 8 - 路由管理 Vue Router

一、Vue Router 简介Vue Router 是 Vue.js 官方的路由管理器&#xff0c;它与 Vue.js 核心深度集成&#xff0c;用于构建单页面应用&#xff08;SPA&#xff09;。单页面应用是指整个应用只有一个 HTML 页面&#xff0c;通过动态切换页面内容来模拟多页面跳转的效果&#xff0c…

django的数据库原生操作sql

from django.db import connection from django.db import transaction from django.db.utils import (IntegrityError,OperationalError,ProgrammingError,DataError ) from django.utils import timezoneclass Db(object):"""数据库操作工具类&#xff0c;封装…

FreeRTOS---基础知识2

1. FreeRTOS 调度机制概述FreeRTOS 是一个实时操作系统&#xff08;RTOS&#xff09;&#xff0c;其核心功能是通过 调度器&#xff08;Scheduler&#xff09; 管理多个任务的执行。调度机制决定了 何时切换任务 以及 如何选择下一个运行的任务&#xff0c;以满足实时性、优先级…

Docker安装(精简述版)

1. 安装&#xff1a;Docker 环境&#xff08;Docker desktop&#xff09; #Windows架构版本查看&#xff0c;Win R‌ 输入 ‌cmd‌ 打开命令提示符&#xff1b;输入命令‌&#xff1a; bash echo %PROCESSOR_ARCHITECTURE%#安装Docker desktop&#xff08;安装时勾选 WSL2&am…

Postman-win64-7.3.5-Setup.exe安装教程(附详细步骤+桌面快捷方式设置)​

Postman 是一款超常用的接口调试工具&#xff0c;程序员和测试人员用它来发送网络请求、测试API接口、调试数据交互​ 1. 双击安装包​ 安装包下载地址&#xff1a;https://pan.quark.cn/s/4b2960d60ae9&#xff0c;找到你下的 Postman-win64-7.3.5-Setup.exe 文件&#xff08…

149. Java Lambda 表达式 - Lambda 表达式的序列化

文章目录149. Java Lambda 表达式 - Lambda 表达式的序列化为什么要序列化 Lambda 表达式&#xff1f;Lambda 表达式的序列化规则示例代码&#xff1a;序列化 Lambda 表达式代码解析&#xff1a;Lambda 序列化的限制总结&#xff1a;149. Java Lambda 表达式 - Lambda 表达式的…

颐顿机电携手观远BI数据:以数据驱动决策,领跑先进制造智能化升级

颐顿机电签约观远数据&#xff0c;聚焦财务分析、销售管理等场景&#xff0c;以 BI 数据解决方案推进数据驱动决策&#xff0c;助力先进制造企业提效与竞争力升级。一、合作官宣&#xff1a;颐顿机电 观远数据&#xff0c;开启数据应用新征程浙江颐顿机电有限公司&#xff08;…

【PHP】几种免费的通过IP获取IP所在地理位置的接口(部分免费部分收费)

目录 一、获取客户端IP地址 二、获取IP所在地理位置接口 1、IP域名归属地查询 2、腾讯地图 - IP定位 3、聚合数据 - IP地址&#xff08;推荐&#xff09; 4、高德地图 - IP定位&#xff08;推荐&#xff09; 5、360分享计划 - IP查询 6、天聚ip地址查询 7、百度IP地址…

【Excel】制作双重饼图

一、效果话不多说&#xff0c;直接上数据和效果图&#xff01;&#xff08;示例软件&#xff1a;WPS Office&#xff09;类别现金刷卡小计苹果10.005.0015.00荔枝20.0015.0035.00西瓜30.0025.0055.00总计60.0045.00105.00二、步骤&#xff08;一&#xff09;制作底图插入饼图&a…

gcc-arm-none-eabi安装后,找不到libgcc.a的拉置

位置在&#xff1a;/usr/lib/gcc/arm-none-eabi/6.3.1/libgcc.a查找方法&#xff1a;arm-none-eabi-gcc --print-libgcc-file-name以前没找到&#xff0c;是因为进错目录&#xff1a;/usr/lib/arm-none-eabi/lib

上证50期权2400是什么意思?

本文主要介绍上证50期权2400是什么意思&#xff1f;“上证50期权2400”通常指上证50ETF期权的某个具体合约代码&#xff0c;其中“2400”是合约代码的一部分&#xff0c;需结合完整代码格式理解其含义。上证50期权2400是什么意思&#xff1f;一、上证50期权合约代码的组成上证5…

发那科机器人P点位置号码自动变更功能为禁用状态

通过改变变量的状态&#xff0c;发那科机器人可以实现&#xff0c;当在程序中进行记录、修改、插入、删除、复制/粘贴包含有P点位置号码的行时&#xff0c;P点位置号码会自动从小到大自动排列&#xff0c;可以实现自动排列&#xff0c;或者点击编辑变更编号也可以下图所示女变量…

什么叫湖仓一体

文章目录概念一、理解湖仓一体&#xff1a;先搞懂“数据湖”和“数据仓库”1. 数据仓库&#xff08;Data Warehouse&#xff09;2. 数据湖&#xff08;Data Lake&#xff09;3. 传统架构的痛点&#xff1a;“湖”与“仓”的割裂二、湖仓一体的核心特点&#xff1a;融合“湖”与…

网络安全突发事件应急预案方案

最近有要求需要出一个网络安全突发事件应急预案方案&#xff0c;本文仅就应急预案问题提出一点初步思考&#xff0c;意在抛砖引玉&#xff0c;盼各位读者不吝赐教&#xff0c;共同完善对这一领域的认识。一、总则 &#xff08;一&#xff09;目的 为有效应对规划建筑设计院企业…

【基于3D Gaussian Splatting的三维重建】保姆级教程 | 环境安装 | 制作-训练-测试自己数据集 | torch | colmap | ffmpeg | 全过程图文by.Akaxi

目录 一.【3DGS环境配置】 1.1 克隆3DGS仓库 1.2 安装Visual Studio 2022 1.2.1 下载Visual Studio 2022 1.2.2 更改环境变量 1.3 创建环境 1.3.1 创建python环境 1.3.2 离线安装torch包 1.3.3 安装依赖包 1.3.4安装子模块 &#xff08;1&#xff09;报错解决&…

C#泛型委托讲解

1. 泛型&#xff08;Generics&#xff09; 泛型允许编写类型安全且可重用的代码&#xff0c;避免装箱拆箱操作&#xff0c;提高性能。 泛型类 // 定义泛型类 public class GenericList<T> {private T[] items;private int count;public GenericList(int capacity){items …

【DL学习笔记】DL入门指南

DL入门指南 资料课程 李沐老师 《动手学深度学习》 https://tangshusen.me/Dive-into-DL-PyTorch/李宏毅老师课程 https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.php DL入门必掌握知识点 数据处理 &#xff1a; numpy、torch地址处理 &#xff1a; os、pathlib文件处…