洛谷 P3396 雜湊衝突 分塊

2021-08-18 02:29:58 字數 1470 閱讀 3401

題目鏈結

給你個數列,編號為1…

n 1…n

。 給出兩種操作:

我們先從最為暴力的思路出發:

我們可以把要求的東西簡寫成su

m[x]

[y] sum

[x][

y]

,代表的含義是模

x x

餘y' role="presentation" style="position: relative;">y

y的編號對應的數字之和,下面我們需要來維護這個東西。

預處理:

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

}

預處理su

m[x]

[y] sum

[x][

y]

的時間複雜度為o(

n2) o(n

2)

想要降低時間複雜度,我們可以想到分塊,分塊能降低到o(

nn‾√

) o(n

n)

做法如下:

我們對模數進行分塊,當模數

x√ x

<

n的時候,我們暴力與處理,時間複雜度為o(

nn‾√

) o(n

n)

。 當模數x

>n‾

√ x

>

n時候我們不將其處理。

詢問模數

x√ x

<

n時候,直接回答。

詢問模數

x>n‾

√ x

>

n時候,暴力按照a[

y]+a

[x+y

]+…+

a[kx

+y] a[y

]+a[

x+y]

+…+a

[kx+

y]

進行計算,由於

x>n‾

√ x

>

n,所以求和的數不超過nn

‾√n n個。

總的複雜度是

x>n‾

√ x

>n。

#include 

#include

#include

using namespace std;

#define pr(x) cout<<#x<<":"int val[150007];

int dp[1007][1007];

int main()

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

}char op;

intx,y;

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

printf("%d\n",ans);}}

else

val[x] = y;}}

return

0;}

洛谷P3396 雜湊衝突 分塊

時空限制 1000ms 128mb 題目描述 眾所周知,模數的hash會產生衝突。例如,如果模的數p 7,那麼4和11便衝突了。b君對hash衝突很感興趣。他會給出乙個正整數序列value。自然,b君會把這些資料存進hash池。第value k 會被存進 k p 這個池。這樣就能造成很多衝突。b君會...

洛谷P3396 雜湊衝突 分塊

給出乙個數列,其中第i i個數在mod pmod p下會被裝進第imo dpim odp個雜湊池。維護一下兩種操作 根號演算法好題。應該不算分塊吧。對於這道題,我們分開兩段維護 模數 t t 此時我們預處理出cnt p x cn t p x 表示在模p p下池x x的元素之和。每次詢問o 1 o 1...

洛谷P3396 雜湊衝突

分塊還真是應用廣泛啊.題意 求 解 以n0.5為界。當p小於n0.5的時候,直接用p 大小的陣列儲存答案。預處理n1.5,修改n0.5。當p大於n0.5的時候,直接按照定義計算,複雜度n0.5。所以總複雜度n1.5,實在是巧妙不堪啊.什麼sb詞彙 1 include 2 include 3 incl...