簡單差分 易懂 牛牛澆樹

2021-10-12 18:06:41 字數 1962 閱讀 5505

簡單差分(保證一看就懂)

引入

首先,給出乙個問題:

給出n個數,再給出q個詢問,每個詢問給出l,r,x,要求你在l到r上每乙個值都加上x,而只給你o(n)的時間範圍,怎麼辦?

思考一下:

方法

還是用上面這個題目,假如要在l和r上全都加乙個x,很顯然,這個o(n)是不可避免的,既然這樣,那我們考慮把o(n*q)變成o(n+q).也就是說,在詢問中我們不去for來加x,而是做乙個標記,最後一起加上。嗯,這裡暫時記住就好…

現在需要自己動筆模擬一下了!

實現

1.先另外開乙個專門差分的陣列(大小=題中的序列長度)

2.假如在3~8的區間上加上5,那我們在差分陣列中的3位置上加上乙個5(原因暫時不懂沒關係,用筆先跟著模擬),再在8+1的位置上減乙個5,如此操作完q次。

3.假如我們只有這一次操作,開始統計答案,運用前置和的思想,dp[i]=dp[i-1]+dp[i].那麼你會發現(如果你模擬了的話),在3~8的區間上,你已經使差分陣列全部加上了5(推廣到所有q一起統計答案依舊正確)

4.再用o(n)的for把他們加到原序列之中去,輸出!

模擬如下:下標1

2345

6789

原始資料00

0000

0003-8區間加500

500

0005

模擬dp陣列00

5

5

5

5

5

5

0此時你會神奇的發現,好像3-8這個區間突然就全部加上了 5 ,是不是很神奇鴨!

題目描述:

牛牛現在在花園養了n棵樹,按順序從第1棵到第n棵排列著。牛牛每天會按照心情給其中某乙個區間的樹澆水。例如如果某一天澆水的區間為[2,4],就是牛牛在這一天會給第2棵,第3棵和第4棵樹澆水。樹被澆水後就會成長,為了簡化問題,我們假設在初始時所有樹的高度為0cm。每過去一天樹會自然成長1cm,每次樹被澆水後當天會額外成長1cm。m天中牛牛每天都都會選乙個區間[l,r]對這個區間內的樹進行澆水,牛牛想知道m天後有多少棵樹的高度為奇數,你能告訴牛牛嗎?

示例1

輸入3,2,[1,2],[2,3]

返回值2

說明

第一天後 第一棵樹高度為2,第二棵樹高度為2,第三棵樹高度為1

第二天後 第一棵樹高度為3,第二棵樹高度為4,第三棵樹高度為3,一共兩棵樹高度為奇數,所以輸出2

備註:

函式共包含四個引數

第乙個引數是乙個int型引數n

第二個引數是乙個int型引數m

第三個引數是乙個共含有m個元素的vector< int>型引數l

第四個引數是乙個共含有m個元素的vector< int>型引數r

對於100%的資料,1≤n≤2e5;1≤m≤2e5;1≤l[i]≤r[i]≤n

class

solution

return ans;}}

;

覺得還行的小夥伴給個三連吧,關注一下部落格主,一起從入門到放棄!!!

簡單題 最小生成樹, 樹鏈剖分, 樹上差分

將最小生成樹構建出來,將沒加入最小生成樹的邊稱為 虛邊 假設有一條 虛邊 為 u,v u,vu,v,則 u,v u,vu,v 在樹上的路徑上的邊可能被替換,稱路徑上的邊被覆蓋 同上 include define reg register define pb push back intread whi...

簡單題 最小生成樹, 樹鏈剖分, 樹上差分

將最小生成樹構建出來,將沒加入最小生成樹的邊稱為 虛邊 假設有一條 虛邊 為 u,v u,v,則 u,v u,v 在樹上的路徑上的邊可能被替換,稱路徑上的邊被覆蓋 同上 include define reg register define pb push back intread while isd...

差分方程的簡單使用

多虧了上週大家的幫助,tt終於得到了乙隻可愛的貓。但沒想到的是,這是乙隻神奇的貓。有一天,神奇的貓決定調查tt的能力,給他乙個問題。即從世界地圖中選擇n個城市,a i 表示第i個城市所擁有的資產價值。然後,這只神奇的貓將執行幾項操作。每輪選擇 l,r 區間內的城市,並將其資產價值增加c,最後需要給出...