P3396 雜湊衝突 分塊

2022-05-01 13:57:10 字數 1798 閱讀 4304

眾所周知,模數的hash會產生衝突。例如,如果模的數p=7,那麼411便衝突了。

b君對hash衝突很感興趣。他會給出乙個正整數序列value

自然,b君會把這些資料存進hash池。第value[k]會被存進(k%p)這個池。這樣就能造成很多衝突。

b君會給定許多個px,詢問在模p時,x這個池內數的總和

另外,b君會隨時更改value[k]。每次更改立即生效。

保證1<=p1<=p

輸入格式:

第一行,兩個正整數n,m,其中n代表序列長度,m代表b君的操作次數。

第一行,n個正整數,代表初始序列。

接下來m行,首先是乙個字元cmd,然後是兩個整數x,y

輸出格式:

對於每個詢問輸出乙個正整數,進行回答。

輸入樣例#1: 複製

10 5

1 2 3 4 5 6 7 8 9 10

a 2 1

c 1 20

a 3 1

c 5 1

a 5 0

輸出樣例#1: 複製

25

4111

直接暴力會超時乙個點

可以將 siz=sqrt n 預處理1-siz 的情況 如果詢問 小於siz 直接輸出 大於則暴力列舉即可

#includeusing

namespace

std;

//input by bxd

#define rep(i,a,b) for(int i=(a);i<=(b);i++)

#define repp(i,a,b) for(int i=(a);i>=(b);--i)

#define ri(n) scanf("%d",&(n))

#define rii(n,m) scanf("%d%d",&n,&m)

#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)

#define rs(s) scanf("%s",s)

#define ll long long

#define see(x) (cerr<

#define inf 0x3f3f3f3f

#define pb push_back

#define clr(a,v) memset(a,v,sizeof a)

#define lson l,m,pos<<1

#define rson m+1,r,pos<<1|1typedef pair

pii;

/////////////////////////////////

/const

int n=200010

;int ans[2000][2000

],a[n];

int n,m,b;char s[3];int

p,x;

intmain()

while(m--)

}else

}return0;

}

view code

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 雜湊衝突

這個套路還是蠻常見的 思路 將操作分為兩類,大於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...