P3396 雜湊衝突

2021-09-27 13:38:53 字數 906 閱讀 5276

這個套路還是蠻常見的

思路: 將操作分為兩類, 大於n

\sqrt

n​的, 和小於它的

為什麼要這麼幹

考慮暴力 , 每次修改o(1

)o(1)

o(1)

, 每次查詢o(n

)o(n)

o(n)

那麼它的複雜度是o(n

2)

o(n^2)

o(n2) 的

觀察發現, 修改的複雜度遠小於查詢, 導致複雜度不平衡

考慮在修改時預處理以降低查詢複雜度

修改時處理將x膜1 ~ n

\sqrt

n​加上a[x], cnt[x] += a[x], o(n

)o(\sqrt)

o(n​)

查詢時, 如果x < n

\sqrt

n​, 直接輸出 mod[x][y%x] , 否則 暴力列舉 , 複雜度o(n

)o(\sqrt)

o(n​)

總複雜度o(n

)o(\sqrt)

o(n​

)

#include#include#include#includeusing namespace std;

int siz;

long long cnt[500000], mod[500][500];

int read(void)

return x;

}int n, m;

int a[200005];

void add(int x,int k)

int main()

char s[5];

while (m--)

else

} }return 0;

}

P3396 雜湊衝突

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

P3396 雜湊衝突 (分塊

題意 給定長度為n的序列a,現在要進行m次操作,操作有兩種 1.給定x,y,詢問下標膜x等於y的所有位置的和 2.給定x,y,將a x 修改為y 資料範圍 n 150000 解法 令sq sqrt n 預處理和維護模數小於等於sq的時候的答案 當模數大於sq的時候,暴力迴圈,迴圈次數不超過sq co...

P3396 雜湊衝突 分塊

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