字符串哈希

const int mod = 1000000513;
const int P = 3000017;
struct H {
vector<int> p, pre;
H(string& s) {
int n = s.size();
p.resize(n + 1);
pre.resize(n + 1);
for (int i = 0; i < n; ++i) {
pre[i + 1] = (1LL * pre[i] * P + s[i]) % mod;
p[i + 1] = 1LL * p[i] * P % mod;
}
}
int query(int L, int R) {
return ((pre[R + 1] - 1LL * pre[L] * p[R - L + 1]) % mod + mod) % mod;
}
};