字首和小結 By cellur925

2022-05-10 05:36:59 字數 2148 閱讀 6438

這篇主要是來介紹字首和的qaq。

字首和有一維的和二維的,一維的很容易理解,高中數學必修5第二章數列給出了前n項和的概念,就是字首和。一維的我們在這裡簡單說一句。

一維字首和

預處理:在輸入乙個數列的時候累加

查詢區間和:查詢[i,j]區間全部元素的和--sum[j]-sum[i-1]

二維字首和

預處理:用到了容斥原理的知識。即求矩陣左上角的頂點與當前點所圍成的矩形所覆蓋的權值。

設f為字首和陣列,則f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+a[i][j]

查詢區間和:

對於乙個邊長為r的正方形,以(i,j)作為右下角的,那它矩陣中的和為

s[i][j]-s[i-r,j]-s[i,j-r]+s[i-r,j-r]

放兩道例題跑(

例題1 [hnoi2003]雷射炸彈

字首和+列舉邊長

1 #include2 #include3

using

namespace

std;

4int

n,r,ans;

5int f[5090][5090];6

intmain()7

15for(int i=1;i<=5001;i++)

16for(int j=1;j<=5001;j++)

1720

for(int i=0;i<=5000-r;i++)

21for(int j=0;j<=5000-r;j++)

2226 printf("%d"

,ans);

27return0;

28 }

view code

例題2 最大正方形

可能是隱藏在dp標籤下的乙個叛徒這題我覺得用字首和最簡單,而且還是01矩陣,只要預處理出字首和然後列舉最大正方形的邊長大小,再看矩陣中權值和是否等於邊長*邊長即可。以及注意邊界問題。

1 #include2 #include3

4using

namespace

std;56

intn,m,ans;

7int f[200][200];8

9int

main()

1018

for(int i=1;i<=n;i++)

19for(int j=1;j<=m;j++)

20for(int k=1;k<=max(n,m);k++)

2127 printf("%d"

,ans);

28return0;

29 }

view code

*update on 10-18

noip2014無線網路發射器選址

二維字首和裸題,當然也可直接列舉中心統計。

但是發現自己字首和這理解可能有點問題hhh。

其實是這樣的qwq。(當然變數名不能用x1y1之類的啦)

1 #include2 #include3 #include4

5using

namespace

std;

6 typedef long

long

ll;7

8int

d,n;

9ll tot,ans;

10 ll w[500][500

];11

12int

main()

1322

for(int i=0;i<=128;i++)

23for(int j=0;j<=128;j++)

24 w[i][j]+=w[i-1][j]+w[i][j-1]-w[i-1][j-1

];25

for(int i=0;i<=128;i++)

26for(int j=0;j<=128;j++)

2739 printf("

%lld %lld

",tot,ans);

40return0;

41 }

view code

序列 樹上差分小結 By cellur925

首先我們需要注意一下的是,差分比較適用於修改比較多而查詢比較少的情況。借教室 這是一道二分答案,在check函式中用到差分技巧的一道題,譬如說我們要把乙個序列中 l,r 區間都加上乙個權值,我們可以把在 l 處加上這個值,在r 1處減去這個值,再對記錄權值的陣列求字首和,那麼我們就可以得到這個真正的...

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

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

字首和 (1)什麼是字首和和一維字首和

字首和 prefix sum 的定義為 對於乙個給定的數列 a,它的字首和數列 s 是通過遞推能求出來得 例如 假設陣列a和字首和陣列s都已經定義 int i 初始條件 a 0 0 s 0 0 for i 1 i n i 下面我們用乙個模板題,將完整的一維陣列字首和做乙個簡單的展示。題目鏈結 inc...