洛谷 P1438 無聊的數列

題意

給定一個序列 A = ( A 1 , A 2 , ? , A n ) A=(A_1,A_2,\cdots,A_n) A=(A1?,A2?,?,An?)
現在進行 m m m次操作,分為以下兩種:

  • 1 l r k d:給定一個長度為 r ? l + 1 r-l+1 r?l+1的等差序列,首項為 k k k,公差為 d d d,并將它對應加到 [ l , r ] [l,r] [l,r]范圍中的每一個數上。
  • 2 x:查詢 A x A_x Ax?的值。

思路

將序列 A A A進行差分,記差分數組為 B B B
接下來,如果要加上一個等差序列,則要進行以下操作:

  • B l = B l + k B_l=B_l+k Bl?=Bl?+k
  • B i = B i + d ( i ∈ [ l , r ] ) B_i=B_i+d \quad (i \in [l, r]) Bi?=Bi?+d(i[l,r])
  • B r + 1 = B r + 1 ? ( k + d × ( r ? l ) ) B_{r+1}=B_{r+1}-(k + d \times (r - l)) Br+1?=Br+1??(k+d×(r?l))

如果不懂,看看下面的例子:
原序列:? A = ( 0 , 0 , 0 , 0 , 0 , 0 ) A=(0,0,0,0,0,0) A=(0,0,0,0,0,0)
差分序列: B = ( 0 , 0 , 0 , 0 , 0 , 0 ) B=(0,0,0,0,0,0) B=(0,0,0,0,0,0)
等差序列: C = ( 1 , 3 , 5 , 7 , 9 ) C=(1,3,5,7,9) C=(1,3,5,7,9)
現序列:? A = ( 1 , 3 , 5 , 7 , 9 , 0 ) A=(1,3,5,7,9,0) A=(1,3,5,7,9,0)
差分序列: B = ( 1 , 2 , 2 , 2 , 2 , ? 9 ) B=(1,2,2,2,2,-9) B=(1,2,2,2,2,?9)

如果要查詢 A p A_p Ap?,就輸出 ∑ i = 1 p B i \sum_{i=1}^{p} B_i i=1p?Bi?
執行以上操作,只需要一個支持單點修改、區間修改。區間查詢的線段樹即可。

代碼

#include <iostream>
#include <vector>
using namespace std;#define int long longstruct segment{#define ls (u << 1)#define rs (u << 1 | 1)struct Node{int l, r, sum = 0, add = 0;};vector<Node> tr;segment(vector<int> &a){int n = a.size();tr.resize(n << 2);build(1, 1, n, a);}void pushup(int u){tr[u].sum = tr[ls].sum + tr[rs].sum;;}void build(int u, int l, int r, vector<int> &a){tr[u].l = l; tr[u].r = r;if(l == r){tr[u].sum = a[l - 1];return;}int mid = l + r >> 1;build(ls, l, mid, a);build(rs, mid + 1, r, a);pushup(u);} void pushdown(int u){if(tr[u].add){tr[ls].sum += tr[u].add * (tr[ls].r - tr[ls].l + 1);tr[rs].sum += tr[u].add * (tr[rs].r - tr[rs].l + 1);tr[ls].add += tr[u].add;tr[rs].add += tr[u].add;tr[u].add = 0;}}void modify(int u, int l, int r, int v){if(l <= tr[u].l && tr[u].r <= r){tr[u].sum += v * (tr[u].r - tr[u].l + 1);tr[u].add += v;return;}pushdown(u);int mid = tr[u].l + tr[u].r >> 1;if(l <= mid) modify(ls, l, r, v);if(r > mid) modify(rs, l, r, v);pushup(u);}int query(int u, int l, int r){if(l <= tr[u].l && tr[u].r <= r) return tr[u].sum;pushdown(u);int mid = tr[u].l + tr[u].r >> 1;int ans = 0;if(l <= mid) ans += query(ls, l, r);if(r > mid) ans += query(rs, l, r);return ans;}#undef ls#undef rs
};signed main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int n, m;cin >> n >> m;vector<int> a(n);for(auto &i: a) cin >> i;vector<int> diff(n);diff[0] = a[0];for(int i = 1; i < n; i++) diff[i] = a[i] - a[i - 1]; segment seg(diff);for(int i = 0; i < m; i++){int op;cin >> op;if(op == 1){int l, r, k, d;cin >> l >> r >> k >> d;seg.modify(1, l, l, k);if(l + 1 <= r) seg.modify(1, l + 1, r, d);if(r < n) seg.modify(1, r + 1, r + 1, -(k + d * (r - l)));}else{int p;cin >> p;cout << seg.query(1, 1, p) << endl;}}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21789.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21789.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21789.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【小白向】微信小程序解密反編譯教程

# 前言 最近筆者有做到微信小程序的滲透測試&#xff0c;其中有一個環節就是對微信小程序的反編譯進行源碼分析&#xff0c;所謂微信小程序反編譯&#xff0c;就是將訪問的小程序進行反向編譯拿到部分源碼&#xff0c;然后對源碼進行安全審計&#xff0c;分析出其中可能存在的…

圖形學初識--顏色混合

文章目錄 前言正文為什么要有顏色混合&#xff1f;顏色混合常見實現方式&#xff1f;上述顏色混合注意點 結尾&#xff1a;喜歡的小伙伴點點關注贊哦! 前言 本章節補充一下顏色混合的內容&#xff0c;主要包含&#xff1a;為什么要有顏色混合&#xff1f;顏色混合常實現方式&a…

BGP——邊界網關路由協議

BGP -邊界網關路由協議 OSPF RIP EIGRP AS——自治系統 標準編號16位二進制 0-65535 1-64511公有 64512 -私有 擴展編號 32位二進制 動態路由協議: GP ——內部網關路由協議 —— AS之內 或企業網、局域網 RIP OSPF EIGRP EGP-外部網關路由協議 - …

Centos 7 安裝刻錄至硬件服務器

前言 在日常測試中&#xff0c;會遇到很多安裝的場景&#xff0c;今天給大家講一下centos 7 的安裝&#xff0c;希望對大家有所幫助。 一.下載鏡像 地址如下&#xff1a; centos官方鏡像下載地址https://www.centos.org/download/ 按照需求依次點擊下載 二.鏡像刻錄 鏡像刻…

idea springboot woff/woff2/eot/ttf/svg等小圖標不顯示的問題 - 第515篇

歷史文章&#xff08;文章累計500&#xff09; 《國內最全的Spring Boot系列之一》 《國內最全的Spring Boot系列之二》 《國內最全的Spring Boot系列之三》 《國內最全的Spring Boot系列之四》 《國內最全的Spring Boot系列之五》 《國內最全的Spring Boot系列之六》 《…

Shopify 獨立站監控觀測最佳實踐

Shopify 簡介 Shopify 是一個全球領先的電子商務平臺&#xff0c;它為商家提供了一整套在線商店解決方案。自 2006 年成立以來&#xff0c;Shopify 已經幫助數百萬商家在全球范圍內建立和發展他們的在線業務。 監控觀測 Shopify 站點對于確保業務連續性、優化用戶體驗和提高運…

python虛擬環境venv的安裝--ubuntu

venv是Python內置的虛擬環境管理工具 1.安裝python3-venv包&#xff1a; sudo apt install python3.12-venv2.創建虛擬環境&#xff08;在項目目錄下&#xff09; python3 -m venv venv3. 激活虛擬環境&#xff1a; source venv/bin/activate4.在虛擬環境中安裝所需的庫&am…

Linux shell編程學習筆記56:date命令——顯示或設置系統時間與日期

0 前言 2024年的網絡安全檢查又開始了&#xff0c;對于使用基于Linux的國產電腦&#xff0c;我們可以編寫一個腳本來收集系統的有關信息。在收集的信息中&#xff0c;應該有一條是搜索信息的時間。 1. date命令 的功能、格式和選項說明 我們可以使用命令 date --help 來查看 d…

python 虛擬環境安裝及python包庫安裝

python 虛擬環境安裝及python包庫安裝 安裝虛擬環境的方式注意事項 安裝虛擬環境的方式 切記盡量不要混用 pip 安裝 對于pip安裝&#xff0c;使用命令如下 下載virtualenv 工具 pip install virtualenv 創建虛擬環境并激活環境virtualenv venv source ./venv/bin/activate co…

Kafka之Broker原理

1. 日志數據的存儲 1.1 Partition 1. 為了實現橫向擴展&#xff0c;把不同的數據存放在不同的 Broker 上&#xff0c;同時降低單臺服務器的訪問壓力&#xff0c;我們把一個Topic 中的數據分隔成多個 Partition 2. 每個 Partition 中的消息是有序的&#xff0c;順序寫入&#x…

LeetCode刷題:反轉鏈表

leetCode真題 206. 反轉鏈表 屬于基礎簡單題目 常見的做法有遞歸和while循環 遞歸 // 1. 遞歸參數和返回值public static ListNode reverseList(ListNode head) {// 1. 遞歸終止條件if (head null || head.next null) {return head;}// 遞歸邏輯ListNode last reverseL…

達夢數據庫相關SQL及適配Mysql配置總結

&#x1f353; 簡介&#xff1a;java系列技術分享(&#x1f449;持續更新中…&#x1f525;) &#x1f353; 初衷:一起學習、一起進步、堅持不懈 &#x1f353; 如果文章內容有誤與您的想法不一致,歡迎大家在評論區指正&#x1f64f; &#x1f353; 希望這篇文章對你有所幫助,歡…

解決Python導入第三方模塊報錯“TypeError: the first argument must be callable”

注意以下內容只對導包時遇到同樣的報錯會有參考價值。 問題描述 當你嘗試導入第三方模塊時&#xff0c;可能會遇到如下報錯信息&#xff1a; TypeError: the first argument must be callable 猜測原因 經過仔細檢查代碼&#xff0c;我猜測這個錯誤的原因是由于變量名沖突所…

Windows 系統安裝 VisualSVN Server

一.下載 VisualSVN Server VisualSVN-Server 是 SVN 版本控制中服務器端要使用的軟件,就是我們提交代碼存在安裝這個軟件的電腦上,它將很多配置和服務直接幫你完成,簡單好用容易上手。VisualSVN Server有三個版本,社區版免費但限15個用戶,另有一般和‘企業’兩個收費版本…

如何卸載ollama

文章目錄 一 概述二 卸載2.1 Windows平臺卸載 ollama2.2 Linux 平臺卸載 ollama2.3 Docker 平臺卸載 ollama 參考鏈接 一 概述 本文檔主要講述 ollama 如何卸載&#xff0c;適用范圍包括 Windows Linux 以及 Docker 等平臺的安裝方式。 二 卸載 2.1 Windows平臺卸載 ollama …

學習C++應該做點什么項目

C作為一門底層可操作性很強的語言&#xff0c;廣泛應用于游戲開發、工業和追求性能、速度的應用。 比如騰訊&#xff0c;無論游戲&#xff0c;還是微信&#xff0c;整個鵝廠后臺幾乎都是 C 開發&#xff0c;對 C 開發者的需求非常大。 但問題是C入門和精通都比較困難&#xf…

有哪些掙錢軟件一天能賺幾十元?盤點十個能長期做下去的掙錢軟件

在這個信息爆炸的時代&#xff0c;每個人都在尋找快速賺錢的秘訣。很多人做兼職副業的目標并不是獲得很大的成功&#xff0c;大部分人一天能賺幾十就心滿意足了。 今天&#xff0c;我要帶你一探究竟&#xff0c;揭秘那些能讓你日賺幾十元的掙錢軟件。準備好了嗎&#xff1f;讓我…

單槍匹馬月入17萬美元:數字游民Pieter Levels如何成就商業傳奇

了解數字游民的應該都聽說過 Pieter Levels&#xff0c;可以說他是數字游民的先驅人物。 他在推特上擁有超過43萬的粉絲&#xff0c;僅憑一臺筆記本電腦就連續建立了多個高盈利網站&#xff0c;光是推特主頁上展示的比較新的幾個網站&#xff0c;每月收入加起來就高達 17.6 萬…

第九周:員工激勵理論

1. 關注自己到關注他人 你是激勵者&#xff0c;也會是被激勵者。 雖然每個人的價值觀不一樣&#xff0c;但要做好激勵員工這件事情&#xff0c;我覺得可以從自身角度出發&#xff0c;可以問問自己&#xff0c;你是如何被激勵的&#xff1f; 如果是我&#xff0c;就只想要錢&…

如何實現區域公司和專業公司合理有效的銜接?

對于集團公司來說&#xff0c;各區域公司、專業公司的管理問題成為困擾管理者的難題。特別是在信息壁壘比較嚴重的情況下&#xff0c;各個單位往往各自為政、自行其是&#xff0c;缺乏有效的溝通和協作&#xff0c;導致整體管理效率低下。那么應該如何實現區域公司和專業公司合…