【LuoguP4887】第十四分块(前体)

题目链接题意区间两数异或在二进制下有 kkk 个 111 的对数。Sol普通莫队的话,如果要实时维护好区间内的答案需要支持区间对一个数求答案。直接做不是很好做,容易发现其实这也就是一个区间询问。那么可以把莫队中要求的东西再次离线下来。我们把上述询问拆成前缀相减的形式,这样我们要做到就是多次询问一个前缀对一个数的答案。由于在数据范围下二进制下有 kkk 个 111 的数并不是太多,我们...
摘要由CSDN通过智能技术生成

题目链接

题意

区间两数异或在二进制下有 k k k 1 1 1 的对数。

Sol

普通莫队的话,如果要实时维护好区间内的答案需要支持区间对一个数求答案。
直接做不是很好做,容易发现其实这也就是一个区间询问。那么可以把莫队中要求的东西再次离线下来。
我们把上述询问拆成前缀相减的形式,这样我们要做到就是多次询问一个前缀对一个数的答案。
由于在数据范围下二进制下有 k k k 1 1 1 的数并不是太多,我们可以直接从前往后做,遇到一个数 x x x 则把 x ⊕ n u m b e r ( k ) x\oplus number(k) xnumber(k) 加入桶中 ( n u m b e r ( k ) number(k) number(k)表示二进制下有 k k k 1 1 1的数)。当我们遇到一个询问 数 y y y 和当前前缀的答案时,只需要看 y y y 的桶被加入了多少个数就行了。

复杂度分析: 由于询问个数和莫队移动次数同阶,为 O ( n n ) O(n\sqrt n) O(nn ) ,查询复杂度是 O ( 1 ) O(1) O(1) 的所以查询复杂度就是 O ( n n ) O(n\sqrt n) O(nn <

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值