一維陣列字首和 子矩陣和

2021-10-09 10:07:05 字數 2476 閱讀 9371

字首和演算法解決靜態的陣列的字首和

樹狀陣列演算法可以解決動態陣列的字首和

字首和–題目連線

字首和暴力解法:(tel)

#include

using

namespace std;

const

int n=

100000

;int a[n+10]

;int s[n+10]

;int

main()

while

(m--

) cout<}return0;

}

字首和解法(ac):

#include

using

namespace std;

const

int n=

100000

;int a[n+10]

;int s[n+10]

;int

main()

for(

int i=

1;i<=n;i++

)while

(m--

)return0;

}

子矩陣的和 --題目連線

#include

#include

using

namespace std;

const

int n=

1000

;const

int q=

200000

;int a[n+10]

[n+10];

int s[n+10]

[n+10];

int n,m,q;

int cnt=1;

int qq[q]

;int

main()

}for

(int i=

1;i<=n;i++)}

while

(q--

)for

(int i=

1;i<=cnt-

1;i++

)return0;

}

樹狀陣列–裸題

動態求連續區間和以及插入數–題目鏈結

樹狀陣列解:

#include

using

namespace std;

const

int n=

100000+10

;int n,m;

int a[n]

;int tre[n]

;int

lowbit

(int key)

void

add(

int index,

int key)

}int

query

(int key)

return res;

}int

main()

for(

int i=

1;i<=n;i++

)while

(m--

)else

}return0;

}

線段樹解:

#include

using

namespace std;

const

int n=

100000+10

;int n,m;

int w[n]

;struct nodetr[n*4]

;void

pushup

(int u)

void

build

(int u,

int l,

int r)

;else

;//除以 2 下取整

int mid=

(l + r)

>>1;

build

(u<<

1,l,mid)

;build

(u<<1|

1,mid+

1,r)

;pushup

(u);}}

intquery

(int u,

int l,

int r)

else

}void

modify

(int u,

int x ,

int v)

pushup

(u);}}

intmain()

build(1

,1,n);

int k,a,b;

while

(m--

)return0;

}

字首和演算法 一維字首和 二維字首和

輸入乙個長度為n的整數序列。接下來再輸入m個詢問,每個詢問輸入一對l,r。對於每個詢問,輸出原序列中從第l個數到第r個數的和。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數,表示整數數列。接下來m行,每行包含兩個整數l和r,表示乙個詢問的區間範圍。輸出格式 共m行,每行輸出乙個詢問的結果。資...

字首和與子矩陣的和

一維字首和 s i a 1 a 2 a i a l a r s r s l 1 二維字首和 s i,j 第i行j列格仔左上部分所有元素的和 以 x1,y1 為左上角,x2,y2 為右下角的子矩陣的和為 s x2,y2 s x1 1,y2 s x2,y1 1 s x1 1,y1資料來自acwing 題...

一維字首和

1 一維字首和 模板 一維字首和 模板題 acwing 795.字首和 s n a i a 2 a 3 a 4 a n s n s n 1 a n a l a l 1 a r s r s l 1 acwing795.字首和 輸入乙個長度為n的整數序列。接下來再輸入m個詢問,每個詢問輸入一對l,r。對...