洛谷 P3372 【模板】線段樹 1-普及+/提高

題目描述

如題,已知一個數列 {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文件處…