这就是大名鼎鼎的莫队二次离线,可以将O(n√nk)O(nnk)变成O(nk+n√n)O(nk+nn) 代码实现: #include<cstdio> #include<algorithm> #include<cmath> #include<vector> #include<cstring> #define R register #define CI const int & using namespace std; int n,m,k,x,y,z,a[100039],ks,q[100039...
那么二离莫队正是用于普通莫队转移复杂度我们无法接受,但是信息可以离线预处理的时候的一种做法。 “二次离线”的名字也是这样来的,就是说,我们这里本身莫队就是一个离线操作了,现在我们再次把这个莫队移动端点这个过程作为询问来离线计算贡献,也就是二次离线。 这里的话,我们就可以把每次询问这样来处理:(这里只讨论...
【洛谷P4887】【模板】莫队二次离线(第十四分块(前体)) 题目 题目链接:https://www.luogu.com.cn/problem/P4887 珂朵莉给了你一个序列\(a\),每次查询给一个区间\([l,r]\),查询\(l \leq i< j \leq r\),且\(a_i \oplus a_j\)的二进制表示下有\(k\)个\(1\)的二元组\((i,j)\)的个...
luogu P4887 【模板】莫队二次离线(第十四分块(前体)) 2021-02-02 13:49 −... 275307894a 0 73 [luogu] P2617 Dynamic Rankings 2019-12-23 11:45 −整体二分模板,所谓整体二分其实就是将修改与询问保存下来,然后二分值域; 树套树亦可,但是码量较大; #include <iostream> #include <cstdio> ...
能莫队。 更新不是O(1)O(1)。 然后我们把要更新的区间存下来,在外面跑就行,大概就是这么个意思。 这道题把区间贡献拆成前缀,预处理之后可以快速求贡献。 时间复杂度O(n√n+Ck14n)O(nn+C14kn),看上去比较离谱,但是能过。 代码 //12252024832524#include<bits/stdc++.h>#defineTT template<typename T>...
所以我们二次离线,先跑一次莫队,将如上的绿色区间保存下来,再统一处理。 具体实现可以每个点开一个vectorvector,然后移动右端点的时,我们将如上的绿色区间保存在左端点,移动左端点时,将绿色区间保存在右端点。 然后我们把这些vectorvector扫一遍,修改就只有在从ii到i+1i+1时才有,查询还是O(n√n)O(nn)次,但...
【模板】莫队二次离线(第十四分块(前体)) 题目链接:luogu P4887 题目大意 给你一个序列,每次查询一个区间 l~r,有多少个二元组 (i,j) 满足 l<=i<j<=r 且 ai 与 aj 的异或和在二进制下恰好 k 位,k 是固定的。 思路 因为这个恰好 k 位,导致似乎不太可能用什么数据结构维护,而且也没有修改。
按照莫队二次离线的套路后需要支持的是 O(n√n)O(nn) 个形如 [1,i][1,i] 中有多少个数与 jj 异或的二进制表示下恰好有 kk 个11。 注意到 a≤214a≤214,也就是说,二进制表示下恰好有 kk 个11 的数量,最大值为 k=7k=7 时(147)=3432(147)=3432 个。 预处理出所有二进制表示下有 kk 个11...