P3396 雜湊衝突 (分塊

2021-10-08 09:41:49 字數 636 閱讀 8267

題意:

給定長度為n的序列a,現在要進行m次操作,操作有兩種:

1.給定x,y,詢問下標膜x等於y的所有位置的和

2.給定x,y,將a[x]修改為y

資料範圍:n<=150000

解法:令sq=sqrt(n)

預處理和維護模數小於等於sq的時候的答案

當模數大於sq的時候,暴力迴圈,迴圈次數不超過sq

code:

#include

using

namespace std;

const

int maxm=

150000+5

;const

int sq=

400;

int f[sq+5]

[sq+5]

;//f[i][j]表示下標膜i等於j的位置的和

int a[maxm]

;int n,q;

signed

main()

}while

(q--

)else

cout

if(op==

'c')

a[x]

=y;}

}return0;

}

P3396 雜湊衝突 分塊

眾所周知,模數的hash會產生衝突。例如,如果模的數p 7,那麼4和11便衝突了。b君對hash衝突很感興趣。他會給出乙個正整數序列value。自然,b君會把這些資料存進hash池。第value k 會被存進 k p 這個池。這樣就能造成很多衝突。b君會給定許多個p和x,詢問在模p時,x這個池內數的...

P3396 雜湊衝突

這個套路還是蠻常見的 思路 將操作分為兩類,大於n sqrt n 的,和小於它的 為什麼要這麼幹 考慮暴力 每次修改o 1 o 1 o 1 每次查詢o n o n o n 那麼它的複雜度是o n 2 o n 2 o n2 的 觀察發現,修改的複雜度遠小於查詢,導致複雜度不平衡 考慮在修改時預處理以降...

P3396 雜湊衝突

這個套路還是蠻常見的 思路 將操作分為兩類,大於 sqrt 的,和小於它的 為什麼要這麼幹 考慮暴力 每次修改 o 1 每次查詢 o n 那麼它的複雜度是 o n 2 的 觀察發現,修改的複雜度遠小於查詢,導致複雜度不平衡 考慮在修改時預處理以降低查詢複雜度 修改時處理將x膜1 sqrt 加上a x...