有以下代码
void add(int u){
for(int i=0;i<2;i++){
for(int j:seg[u].vec[i]){
mp[i][j]++;
}
}
}
void del(int u){
for(int i=0;i<2;i++){
for(int j:seg[u].vec[i]){
mp[i][j]--;
}
}
}
void solve(int u){
add(u);
if(seg[u].l==seg[u].r){
ans[seg[u].l]+=mp[0][w[rnk[seg[u].l]]+depth[rnk[seg[u].l]]]+mp[1][w[rnk[seg[u].l]]-depth[rnk[seg[u].l]]],del(u);
return;
}
solve(u*2),solve(u*2+1),del(u);
}
其中seg是线段树 维护了一个长度为n的数列 而且保证每个节点vector size的和为n(logn^2)
那么这段代码的复杂度是n(logn^3)还是n(logn^2)