inline void split(int loc)
{
e.emplace(e.begin()+loc+1,e[loc]);
e[loc].a.erase(e[loc].a.begin()+limit,e[loc].a.end());
e[loc+1].a.erase(e[loc+1].a.begin(),e[loc+1].a.begin()+limit);
for (auto v : e[loc].a) e[loc+1].sums[v]--,e[loc+1].sumc[bel[v]]--;
for (auto v : e[loc+1].a) e[loc].sums[v]--,e[loc].sumc[bel[v]]--;
return ;
}
这是我块链里面的一段代码,功能是将 loc 这个块分成 l 到 limit 和 limit+1 到 r 这两个块。看了半天应该是没问题的,但是实际运行 RE 了。
下面两个循环就是更新的分块求区间第 K 大的两个数组。