线段树维护哈希
维护两个哈希防被卡
ll v1[N<<2], v2[N<<2], b1[N], b2[N];
void init() {
b1[1]=b2[1]=1;
REP(i,1,N-1) b1[i]=b1[i-1]*233%P,b2[i]=b2[i-1]*131%P;
}
void update(int o, int l, int r, int x) {
if (l==r) return v1[o]=v2[o]=1,void();
mid>=x?update(ls,x):update(rs,x);
v1[o]=(v1[lc]+v1[rc]*b1[mid-l+1])%P;
v2[o]=(v2[lc]+v2[rc]*b2[mid-l+1])%P;
}
void query(int o, int l, int r, int ql, int qr, ull &t1, ull &t2) {
if (ql<=l&&r<=qr) {
t1 = (t1+v1[o]*b1[l-ql])%P;
t2 = (t2+v2[o]*b2[l-ql])%P;
return;
}
if (mid>=ql) query(ls,ql,qr,t1,t2);
if (mid<qr) query(rs,ql,qr,t1,t2);
}
int main(){}

浙公网安备 33010602011771号