差分陣列學習筆記

2021-09-11 19:13:22 字數 1482 閱讀 1702

對於已知有n個元素的離線數列d,我們可以建立記錄它每項與前一項差值的差分陣列f:顯然,f[1]=d[1]-0=d[1];對於整數i∈[2,n],我們讓f[i]=d[i]-d[i-1]。

區間加減操作:o(1)

假如現在對數列中區間[l,r]上的數加上x,令f[l]+=x,f[r+1]-=x即可。

詢問每一項的值:o(n)

求差分陣列字首和即可

陣列字首和:o(n)

第i項的字首和即為數列前i項的和,那麼推導可知

leetcode5615 使陣列互補的最少操作次數

class solution 

int now = n;

int ans = n;

for (int i = 2; i <= limit * 2; ++i)

return ans;}};

hdu1511 color the ball-n個氣球排成一排,從左到右依次編號為1,2,3....n.每次給定2個整數a b(a <= b),lele便為騎上他的「小飛鴿"牌電動車從氣球a開始到氣球b依次給每個氣球塗一次顏色。但是n次以後lele已經忘記了第i個氣球已經塗過幾次顏色了,你能幫他算出每個氣球被塗過幾次顏色嗎?

-input:每個測試例項第一行為乙個整數n,(n <= 100000).接下來的n行,每行包括2個整數a b(1 <= a <= b <= n)。當n = 0,輸入結束。

-output:每個測試例項輸出一行,包括n個整數,第i個數代表第i個氣球總共被塗色的次數。

線段樹或差分陣列皆可

#include#include#include#include#includeusing namespace std; 

int d[100010],a[100010],l,r;

int main()

for(int i=1;i<=n;++i) a[i]=a[i-1]+d[i];

for(int i=1;i[洛谷p3948]資料結構

最開始的陣列每個元素都是0

給出n,opt ,min,max,mod 在int範圍內

a: l ,r ,x 表示把[l,r] 這個區間加上x(陣列的從l到r的每個元素都加上x)

q : l ,r 表示詢問[l,r] 這個區間中元素t滿足 min<=(t∗i %mod)<=max 的 t這樣的數的個數(i是陣列下標)(元素的值*陣列下標%mod在min到max範圍內)

待補。。

codeforces_1110_e

待補。。

參考部落格:

差分陣列學習筆記

題目 來先看一道裸題,有n個數。m個操作,每一次操作,將x y區間的所有數增加z 最後有q個詢問,每一次詢問求出x y的區間和。那麼這就可以用差分陣列去實現了 差分陣列不僅僅是乙個優秀的資料結構,還是一種很好的思想 差分陣列的功能是修改區間,查詢點 修改區間的時間複雜度是o 1 查詢點的時間複雜度為...

演算法筆記 差分陣列

差分陣列是什麼呢?差分陣列是字首和的逆運算,同樣運用到容斥原理 一維 l r a l a r 1 二維 x1 x2 y1 y2 a x1 y1 a x1 y2 1 a x2 1 y1 a x2 1 y2 1 三維 x1 x2 y1 y2 z1 z2 a x1 y1 z1 a x2 1 y1 z1 a...

差分陣列概述

在網上講差分陣列的博文很少,也很難找到。一度以為差分陣列是傳播於小眾的神犇技巧所以一直放著沒有去研習。今天做了 bzoj1635後發現各路神犇都用差分陣列,本蒟卻傻傻寫了線段樹。對於序列a 取a i a i 1 為其差分陣列b i 的值,可以發現,a i bj 1 j i 如 對於序列 a b c ...