P3396 哈希冲突 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include<bits/stdc++.h>using namespace std;const int MAXn = 1e5 + 5e4;const int MAXsqrtn = 387;template <typename T>inline void read(T &a) { char c;for (c = getchar(); (c < '0' || c > '9') && c != '-'; c = getchar());bool f = c == '-';T x = f ? 0 : (c ^ '0');for (c = getchar(); c >= '0' && c <= '9'; c = getchar()) {x = x * 10 + (c ^ '0');}a = f ? -x : x;}template <typename T, typename ...Argv>inline void read(T &a, Argv &...argv) { read(a), read(argv...);}int n, sqrtn, m, a[MAXn + 10];int small[MAXsqrtn + 10][MAXsqrtn + 10];signed main() { read(n, m); sqrtn = sqrt(n); for (int i = 1; i <= n; ++i) { read(a[i]); for (int j = 1; j <= sqrtn; ++j) { small[j][i % j] += a[i]; } } char opt; for (int i = 1; i <= m; ++i) { scanf("%s", &opt); if (opt == 'A') { int mod, yu; read(mod, yu); if (mod <= sqrtn) { printf("%d\n", small[mod][yu]); } else { int ans = 0; for (int i = (yu ? yu : mod); i <= n; i += mod) { ans += a[i]; } printf("%d\n", ans); } } else { int idx, val; read(idx, val); for (int i = 1; i <= sqrtn; ++i) { small[i][idx % i] += -a[idx] + val; } a[idx] = val; } } return 0;}