关于三维莫队问题的一些思考和探究

手动博客搬家: 本文发表于20180919 15:41:25, 原地址https://blog.csdn.net/suncongbo/article/details/82771387

背景介绍

首先,我是一名菜鸡。
前几天在做bzoj 5283时,经过转化后需要处理这样一个二元函数
\(S(x,y)=\sum^{x}_{i=1} C^i_y\)
其中有\(Q\)组询问,\(x\le y\le 2.5\times 10^5, Q\le 2.5\times 10^5\).
做法是:我们发现这个函数的重要性质是,假如已知\(S(x,y)\), 那么我们可以在\(O(1)\)的时间内转移得到\(S(x+1,y), S(x-1,y), S(x,y+1), S(x,y-1)\).
于是,我们依照莫队的思想,将所有询问离线下来。
对于询问\(S(x_1,y_1), S(x_2,y_2)\) 按如下的规则进行比较排序:
首先比较\(\frac{x_1}{\sqrt n}\)与\(\frac{x_2}{\sqrt n}\)的值,小的在前。
如果这两个值相同的话,再比较\(y_1\)与\(y_2\).
从一个询问跳到另一个询问时,我们直接暴力一个一个地把左端点从\(x_1\)移到\(x_2\), 右端点从\(y_1\)移至\(y_2\).
这样对所有询问排序后 ,我们计算左右端点的移动总距离。假设\(Q,n\)同阶。
左端点移动距离\(T_1\): 对于每个大小为\(\sqrt n\)的块,左端点一定要在块内移动。每次移动的距离不超过\(\sqrt n\), 每个块内移动的总次数不超过\(n\) (\(n\)个询问), 总移动的距离不超过\(n\sqrt n\). 这是块内的情况,而左端点在块与块之间移动时,每次移动的距离不超过\(2\sqrt n\), 但是由于只有\(\sqrt n\)个块,因此总移动次数不超过\(\sqrt n\), 总距离\(O(n)\). 综上,左端点移动总距离\(O(n\sqrt n)\).
而右端点呢?更简单:对于左端点在同一个大小为\(\sqrt n\)的块内的询问,右端点是单调右移的,移动总距离不超过\(n\), 又因为有\(\sqrt n\)个块,因此总距离\(O(n\sqrt n)\).
综上,左右端点移动的总距离为\(O(n\sqrt n)\), bzoj 5283这道题已经在\(O(n\sqrt n)\)的复杂度内解决,均摊每次询问\(O(\sqrt n)\).(然而bzoj老爷机毒瘤卡常呜呜呜...)

问题引入——三维莫队

刚才,我们处理的是一个二元函数\(S(x,y)\), 具有重要的转移性质。现在我们拓展这个问题,假设我们有一个三元函数\(f(x,y,z)\), 其可以在\(O(1)\)的时间内转移到\(f(x-1,y,z), f(x+1,y,z), f(x,y-1,z), f(x,y+1,z), f(x,y,z-1), f(x,y,z+1)\)这六个值。有\(Q\)次询问,每次询问一个\(f(x,y,z)\)的值,\(x,y,z\le n\), 是否可以较快速地求出所有询问的答案呢?
假设\(Q, n\le 4.5\times 10^4\).

个人的想法

仿照二维莫队的思路,我们首先对询问进行排序。
我们来形式化地推一发。
设我们的排序方式是第一关键字\(\frac{x}{n^a}\), 第二关键字\(\frac{y}{n^b}\), 第三关键字\(z\).
对于\(x\), 在每个块内移动距离\(O(n^a)\), 总询问数\(O(n)\), 总距离\(O(n^{1+a})\).
对于\(y\), 当\(x\)在同一大块内时,\(y\)每次移动距离\(O(n^b)\), 共\(n\)个询问,\(O(n^{1+b})\). 当\(x\)不在同一大块内时,有\(O(n^{1-a})\)个大块,每个大块\(y\)要移动\(n\)的距离,因此\(O(n^{2-a})\). 综上,\(y\)移动距离\(O(n^{\max(1+b,2-a)})\).
对于\(z\), 我们考虑\(x,y\)的块总共会将\(n\)个询问分成\(O(n^{1-a+1-b})\)类,对于每一类询问,都要移动\(n\)的距离,因此\(z\)移动距离\(O(n^{3-a-b})\).
然后我们来最优化。首先,为了让复杂度不至于达到\(O(n^2)\), \(3-a-b\)必须\(\lt 2\), \(a+b\gt 1\). 而对于\(y\)的\(\max(1+b,2-a)\), \(1+b\gt 2-a\)等价于\(a+b\gt 1\), 因此恒满足,\(y\)的复杂度其实就是\(O(n^{1+b})\).
然后就简单了……\(O(n^{1+a}), O(n^{1+b}), O(n^{3-a-b})\), 平衡一下,显然\(a=b=n^\frac{2}{3}\)时取最优,\(O(n^\frac{5}{3})\), 单次均摊\(O(n^\frac{2}{3})\).

后记

重申,本人弱鸡,刚刚从bzoj 5283这道题里得到的启发,推了一发写了此文,若有错误敬请大佬们指出,感激不尽。
关于三维莫队问题,目前没有任何一个人跟我讨论过,纯粹是我自己的一点想法,也没有找其他人检验过(我好菜啊),也没有专门看过此类课题的论文,因此文章内容很可能有错误之处。不过刚才推了这么一大串,最后的核心思想就是一个,通过排序平衡三个端点的移动距离。刚才的内容如果正确,还可以推广到更高维的情况,但是更高维大概只有理论价值,实际上并不会比\(O(n^2)\)暴力快到哪里去。我相信,这个简简单单的问题早已被之前的大佬们解决,我只是发表一点自己的思考而已。如果哪位大佬在这个问题上有更优秀的做法,敬请指出,谢谢。

发表于 2019-01-22 19:45 suncongbo 阅读(...) 评论(...) 编辑 收藏

刷新评论刷新页面返回顶部

关于三维莫队问题的一些思考和探究相关推荐

  1. 初识莫队——小Z的袜子

    以前一直觉得莫队是多么高大上的一种算法,然而仔细看了下发现其实并不复杂,实质上就是技巧性的暴力美学. 在我看来莫队是一种分块排序后降低复杂度的算法,当答案可以通过左右端点一个一个移动维护出来的时候就可 ...

  2. 洛谷 - P3246 [HNOI2016]序列(莫队+单调栈)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问需要回答一个区间 [l,r][l,r][l,r] 内所有子区间的最小值之和 题目分析:因为可以离线,所以考 ...

  3. HH的项链 HYSBZ - 1878 (莫队/ 树状数组)

    HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的项链变得越来越长.有一天,他突然 ...

  4. [ NOIP提高组 2016]愤怒的小鸟(暴搜 + 状压DP)// [SNOI2017]一个简单的询问(莫队)

    一次性写两道题 T1:一个简单的询问 题目 题解 代码实现 T2:愤怒的小鸟 题目 暴搜题解 暴搜代码实现 状压DP题解 状压DP代码实现 T1:一个简单的询问 题目 给你一个长度为 N 的序列 ai ...

  5. 【莫队/树上莫队/回滚莫队】原理详解及例题:小B的询问(普通莫队),Count on a tree II(树上莫队),kangaroos(回滚莫队)

    文章目录 问题引入 介绍莫队算法及其实现过程 时间复杂度 莫队算法适用范围 莫队奇偶优化 普通莫队:小B的询问 树上莫队:SP10707 COT2 - Count on a tree II 回滚莫队: ...

  6. BZOJ 1878 hh的项链(简单莫队)

    Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的项链变得 ...

  7. 2023牛客寒假算法基础集训营4_20230130「向上取整」「夹逼dp」「lowbit科学+树状数组性质」「搜索」「倍增跳表」「莫队」

    6/13 教育场是有被教育到.(预计会鸽几题. 已过非太水的题们 //B //https://ac.nowcoder.com/acm/contest/46812/B//小构造小数学#include & ...

  8. P1903 数颜色 (带修莫队)

    题目传送门 ~~~ 题目大意 给一个有 n 个元素的数组 a,有 m 次操作,操作如下: Q 操作,询问区间 (l, r) 不同元素的个数 R 操作,把第 x 个元素修改为 y 对于每次 Q 操作,输 ...

  9. 洛谷 P2056 采花 - 莫队算法

    萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 1-c 表示) ,且花是排成一排的,以 ...

最新文章

  1. 崇拜的Unix大牛,记录之。
  2. 移动应用专项测试思路和方法
  3. MVC4实现批量更新数据
  4. 如何将zipoutputstream返回_性能问题|如何正确使用“缓存”?
  5. python super理解(二)
  6. 并查集入门三连:HDU1213 POJ1611 POJ2236
  7. MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证
  8. Linux内核驱动调试,Linux内核设备驱动之内核的调试技术笔记整理
  9. Linux安装redis和部署
  10. [转载]Qt之获取本机网络信息
  11. offset must be non-negative and no greater than buffer length (0)(tensorflow.keras)
  12. Unity 自学与进阶必会目录
  13. B方法-拓展你形式化方法的视野
  14. jsp内置对象之request
  15. 红米手机Pro超简单刷入开发版获得ROOT超级权限的步骤
  16. 西南大学计算机考研学硕,西南大学心理学学硕343分考研经验
  17. python实现图片拼接长图_python 多张图片拼接为一张长图
  18. 尚学堂学习周期及相关视频简介
  19. 如何启用计算机的无线功能,笔记本电脑怎么开WiFi_笔记本电脑如何打开WIFI功能-win7之家...
  20. 原生WebGL场景中绘制多个圆锥圆柱

热门文章

  1. 行政区村界线_工作动态 | 龟山镇召开村级行政区域界线勘定工作暨民政业务培训会议...
  2. lstm不收敛_20道深度学习面试题,有你不知道的吗?
  3. asp.net2.0中session在ie9下不能保存的问题
  4. div的visibility和display属性区别
  5. android客户端访问服务端,服务端返回json数据
  6. input变下划线的输入框CSS
  7. OpenGL通过原图自动生成法线贴图
  8. 【快乐水题】594. 最长和谐子序列
  9. RabbitMQ支持的消息模型
  10. Introduction to Byteball — Part 3: Smart Contracts