luogu P4887 模板 莫队二次离线 莫队 离线
LINK:模板莫队二次离线
很早以前学的知识点 不过 很久了忘了。
考虑暴力 :每次莫队更新的时候 尝试更新一个点到一个区间的答案 可以枚举二进制下位数为k的数字 看一下区间内的这种数字有多少个。
不过这样每次移动的复杂度为 C(14,k)的。
考虑 将每次移动操作进行离线 答案进行差分。
那么只需要求出指针移动的变换量即可 由于左端点和右端点的变换量都是nsqrt(n)的
如果直接开空间这么存 空间复杂度nsqrt(n).吃不消。
考虑将一个f(L,[L+1,R])的这种形式的贡献进行前后差分 f(L,1~R)-f(L,[1,L-1]).
这样每次存的都是连续的一堆 离线下来的东西也可以前缀和的时候做 前一步nsqrt(n)。
后一步进行扫描线 nk+nsqrt(n).
很妙的算法。
const int MAXN=100010;
int n,m,k,B,maxx;
int a[MAXN],sum[MAXN],pre[MAXN],v[MAXN];ll ans[MAXN],cc[MAXN];
struct wy{int l,r,id;}t[MAXN];
vector<wy>g[MAXN];
vector<int>p;
inline int cmp(wy a,wy b){return v[a.l]==v[b.l]?a.r<b.r:a.l<b.l;}
int main()
{
freopen("1.in","r",stdin);
get(n);get(m);get(k);
if(k>14)
{
rep(1,m,i)puts("0");
return 0;
}
maxx=16383;
rep(0,maxx,i)
{
sum[i]=sum[i>>1]+(i&1);
if(sum[i]==k)p.pb(i);
}
rep(0,maxx,i)sum[i]=0;
B=(int)sqrt(n*1.0);
rep(1,n,i)
{
get(a[i]);v[i]=(i-1)/B+1;
pre[i-1]=sum[a[i]];
vep(0,p.size(),j)++sum[a[i]^p[j]];
}
rep(1,m,i)t[i]=(wy){read(),read(),i};
sort(t+1,t+1+m,cmp);
int L=1,R=0;
rep(1,m,i)
{
if(L<t[i].l)g[R].pb((wy){L,t[i].l-1,-i});
while(L<t[i].l){ans[i]+=pre[L-1];++L;}
if(L>t[i].l)g[R].pb((wy){t[i].l,L-1,i});
while(L>t[i].l){--L;ans[i]-=pre[L-1];}
if(R<t[i].r)g[L-1].pb((wy){R+1,t[i].r,-i});
while(R<t[i].r){ans[i]+=pre[R];++R;}
if(R>t[i].r)g[L-1].pb((wy){t[i].r+1,R,i});
while(R>t[i].r){ans[i]-=pre[R-1];--R;}
}
rep(0,maxx,i)sum[i]=0;
rep(1,n,i)
{
vep(0,p.size(),j)++sum[a[i]^p[j]];
vep(0,g[i].size(),j)
{
int l=g[i][j].l;int r=g[i][j].r;
int id=g[i][j].id;
rep(l,r,w)
{
int ww=sum[a[w]];
if(k==0&&w<=i)--ww;
if(id<0)ans[-id]-=ww;
else ans[id]+=ww;
}
}
}
rep(1,m,i)ans[i]+=ans[i-1],cc[t[i].id]=ans[i];
rep(1,m,i)putl(cc[i]);
return 0;
}
luogu P4887 模板 莫队二次离线 莫队 离线的更多相关文章
- luogu P4887 莫队二次离线
珂朵莉给了你一个序列$a$,每次查询给一个区间$[l,r]$ 查询$l≤i<j≤r$,且$ai⊕aj$的二进制表示下有$k$个$1$的二元组$(i,j)$的个数.$⊕$是指按位异或. 直接暴力莫 ...
- 洛谷 P4887 -【模板】莫队二次离线(第十四分块(前体))(莫队二次离线)
题面传送门 莫队二次离线 mol ban tea,大概是这道题让我第一次听说有这东西? 首先看到这类数数对的问题可以考虑莫队,记 \(S\) 为二进制下有 \(k\) 个 \(1\) 的数集,我们实时 ...
- [Ynoi2019模拟赛]Yuno loves sqrt technology II(二次离线莫队)
二次离线莫队. 终于懂了 \(lxl\) 大爷发明的二次离线莫队,\(\%\%\%lxl\) 二次离线莫队,顾名思义就是将莫队离线两次.那怎么离线两次呢? 每当我们将 \([l,r]\) 移动右端点到 ...
- 洛谷P5398 [Ynoi2018]GOSICK(二次离线莫队)
题面 传送门 题解 维包一生推 首先请确保您会二次离线莫队 那么我们现在的问题就是怎么转移了,对于\(i\)和前缀\([1,r]\)的贡献,我们拆成\(b_i\)和\(c_i\)两部分,其中\(b_i ...
- Luogu P2742 模板-二维凸包
Luogu P2742 模板-二维凸包 之前写的实在是太蠢了.于是重新写了一个. 用 \(Graham\) 算法求凸包. 注意两个向量 \(a\times b>0\) 的意义是 \(b\) 在 ...
- D. Powerful array 离线+莫队算法 给定n个数,m次查询;每次查询[l,r]的权值; 权值计算方法:区间某个数x的个数cnt,那么贡献为cnt*cnt*x; 所有贡献和即为该区间的值;
D. Powerful array time limit per test seconds memory limit per test megabytes input standard input o ...
- LUOGU P4074 [WC2013]糖果公园 (树上带修莫队)
传送门 解题思路 树上带修莫队,搞了两天..终于开O2+卡常大法贴边过了...bzoj上跑了183s..其实就是把树上莫队和带修莫队结合到一起,首先求出括号序,就是进一次出一次那种的,然后如果求两个点 ...
- [luogu P3384] [模板]树链剖分
[luogu P3384] [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点 ...
- 按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式
按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式 之前写过一篇文章<按照已有的模板输出一(如发票)>,是关于如何给已有的模板赋值.在项目的实践过程 ...
随机推荐
- WPF弹性、惯性效果应用
WPF弹性.惯性效果.已发布在了一些网站,都是这里写的 代码改编自微软示例代码库 // Copyright © Microsoft Corporation. All Rights Reserved. ...
- CSS学习之选择器优先级与属性继承
CSS学习之选择器优先级与属性继承 选择器优先级 其实选择器是具有优先级的,我们来看下面这一组案例: <!DOCTYPE html> <html lang="en" ...
- JVM 专题十四:本地方法接口
1. 本地方法接口 2. 什么是本地方法? 简单来讲,一个Native Method就是一个Java调用非Java代码的接口.一个Native Method是这样一个java方法:该方法的实现由非Ja ...
- scrapy 源码解析 (四):启动流程源码分析(四) Scheduler调度器
Scheduler调度器 对ExecutionEngine执行引擎篇出现的Scheduler进行展开.Scheduler用于控制Request对象的存储和获取,并提供了过滤重复Request的功能. ...
- 数据可视化实例(十四):带标记的发散型棒棒糖图 (matplotlib,pandas)
偏差 (Deviation) 带标记的发散型棒棒糖图 (Diverging Lollipop Chart with Markers) 带标记的棒棒糖图通过强调您想要引起注意的任何重要数据点并在图表中适 ...
- git的工作区和暂存区
目录 备注: 知识点 工作区(Working Directory) 版本库(Repository) 备注: 本文参考于廖雪峰老师的博客Git教程.依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查 ...
- HTTP版本比较
HTTP2.0优势 1.采用二进制格式传输数据,而非http1.1文本格式,二进制格式在协议的解析和优化扩展上带来了跟多的优势和可能 2.对消息头采用Hpack进行压缩传输,能够节省消息头占用的网络流 ...
- 关于python爬取异步ajax数据的一些见解
我们在利用python进行爬取数据的时候,一定会遇到这样的情况,在浏览器中打开能开到所有数据,但是利用requests去爬取源码得到的却是没有数据的页面框架. 出现这样情况,是因为别人网页使用了aja ...
- ant design pro : 依赖项 webpack-theme-color-replacer 最新版导致项目无法启动?
重新装了一个项目的依赖,结果发现打不开了? 报错如下: This dependency was not found: * webpack-theme-color-replacer/client in ...
- Linux指令,更新中
Linux指令 ls 列举文件. ls *.txt:列举所有txt后缀的文件夹. touch 创建文件. $ touch asd.txt fgh.txt $ touch love{1..10}shiy ...