[Ynoi2019 模拟赛] Yuno loves sqrt technology III

分块后,预处理 F i , j F_{i,j} Fi,j​表示第 i ∼ j i\sim j i∼j块的众数的出现次数。

用vector按顺序存每个数值所有元素的出现位置。

再记录每个元素在相应vector里的下标 p p p。

考虑询问,中间的直接使用预处理出的 F i , j F_{i,j} Fi,j​的值即可。设当前的答案 a n s = F i , j ans=F_{i,j} ans=Fi,j​。

考虑边界的元素。这里我们运用迭代的思想。对于右边的边角元素 x x x,如果它的出现次数比ans大,那么 p x − a n s p_x-ans px​−ans 的元素 y y y 当然大于等于 l l l 。这个判断是O(1)的。

显然,由于边界的数最多 2 n 2\sqrt n 2n ​个,所以最多使得答案增加 2 n 2\sqrt n 2n ​。

每次询问对 O ( n ) O(\sqrt n) O(n ​)个元素检查,++ans的次数为 O ( n ) O(\sqrt n) O(n ​)次。所以查询的时间复杂度为 O ( m n ) O(m\sqrt n) O(mn ​)。

总时间复杂度 O ( ( n + m ) n ) O((n+m)\sqrt n) O((n+m)n ​),空间复杂度 O ( n ) O(n) O(n)。

[Ynoi2019 模拟赛] Yuno loves sqrt technology II

树状数组+莫队的时间复杂度是 O ( n l o g n m ) O(nlogn\sqrt{m}) O(nlognm ​)

考虑优化,我们发现我们的某一次询问其实是可以差分的。

即每次右指针右移的时候,都有这样的一组询问: l − r l-r l−r中有多少数比 a r a_r ar​大

然而这个东西可以差分: [ 1 , r ] [1,r] [1,r]中比 a r a_r ar​大的数的数量减去 [ 1 , l − 1 ] [1,l-1] [1,l−1]中比 a r a_r ar​大的数的数量。

对于前面那一坨可以用树状数组做。

后面那一坨询问离线下来处理即可。

这个时候我们一共存了 n m n\sqrt m nm ​ 组移动(莫队复杂度,总移动次数)也就是要处理 n m n\sqrt m nm ​组询问。

然而我们可以平衡它的复杂度,因为我们要处理 n m n\sqrt m nm ​询问,却只需要插入 O ( n ) O(n) O(n)组数(即左端点扫过去的过程只移动 n n n 次)

可以使用一个插入 O ( n ) , O(\sqrt n), O(n ​),查询 O ( 1 ) O(1) O(1)的数组结构 − > -> −>值域分块。

对于莫队中的四种移动分 4 4 4类讨论,最后需要从 1 − n 1-n 1−n用左端点扫一遍还需要再用右端点从 n − 1 n-1 n−1扫一遍。

这样复杂度就被平衡到了 O ( n m + n n ) O(n\sqrt m+n\sqrt n) O(nm ​+nn ​)辣。

但是这样做要把 n m n\sqrt m nm ​移动存下来,空间吃不下。

我们发现其实莫队的移动有规律,当右端点移动的时候,其左端点并没有发生任何移动,我们可以用 ( l , s t , e d , 1 / − 1 ) (l,st,ed,1/-1) (l,st,ed,1/−1)来表示。

同理,当左端点移动的时候,右端点也没有发生任何移动。

这样空间复杂度就变成了 O ( M ) O(M) O(M)。

本题的[st,ed]如果是 l l l的变化区间,就只把端点 s t st st, e d ed ed存进vector数组,当i=st时把询问加入,i=ed+1时把询问删除即可。操作总数仍然只有 O ( n m ) O(n\sqrt{m}) O(nm ​)次。

【口胡】Ynoi刷题记录相关推荐

  1. LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)

    LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...

  2. LeetCode刷题记录14——257. Binary Tree Paths(easy)

    LeetCode刷题记录14--257. Binary Tree Paths(easy) 目录 前言 题目 语言 思路 源码 后记 前言 数据结构感觉理论简单,实践起来很困难. 题目 给定一个二叉树, ...

  3. LeetCode刷题记录13——705. Design HashSet(easy)

    LeetCode刷题记录13--705. Design HashSet(easy) 目录 LeetCode刷题记录13--705. Design HashSet(easy) 前言 题目 语言 思路 源 ...

  4. LeetCode刷题记录12——232. Implement Queue using Stacks(easy)

    LeetCode刷题记录12--232. Implement Queue using Stacks(easy) 目录 LeetCode刷题记录12--232. Implement Queue usin ...

  5. LeetCode刷题记录11——290. Word Pattern(easy)

    LeetCode刷题记录11--290. Word Pattern(easy) 目录 LeetCode刷题记录11--290. Word Pattern(easy) 题目 语言 思路 源码 后记 题目 ...

  6. LeetCode刷题记录10——434. Number of Segments in a String(easy)

    LeetCode刷题记录10--434. Number of Segments in a String(easy) 目录 LeetCode刷题记录9--434. Number of Segments ...

  7. LeetCode刷题记录9——58. Length of Last Word(easy)

    LeetCode刷题记录9--58. Length of Last Word(easy) 目录 LeetCode刷题记录9--58. Length of Last Word(easy) 题目 语言 思 ...

  8. LeetCode刷题记录8——605. Can Place Flowers(easy)

    LeetCode刷题记录8--605. Can Place Flowers(easy) 目录 LeetCode刷题记录8--605. Can Place Flowers(easy) 题目 语言 思路 ...

  9. LeetCode刷题记录7——824. Goat Latin(easy)

    LeetCode刷题记录7--824. Goat Latin(easy) 目录 LeetCode刷题记录7--824. Goat Latin(easy) 题目 语言 思路 后记 题目 题目需要将一个输 ...

最新文章

  1. 漫画:程序员相亲图鉴,笑屎我了~
  2. tomcat结构分析
  3. 让人欲罢不能的Feed流系统是如何设计的?
  4. 使用Spring工厂模式管理多个类实现同一个接口
  5. html之CSS设计(文本、边框、列表标签、display设置、内外边距)
  6. JMM内存模型详解(一)
  7. 美国能限制linux内核,美国大学教授「故意」向 Linux 提交含 Bug 代码,内核管理员“封杀”明尼苏达大学...
  8. 分享128个简约模板PPT模板,总有一款适合你
  9. 电驴搜索服务器正在连接,电驴连接不上服务器导致无法搜索解决的方法介绍
  10. ES8316耳机驱动可以差分输入支持录音PEQ调节
  11. 新时期文学专题研究【1】
  12. IE无法打开internet站点已终止操作
  13. 安装了本地MySQL后,小皮面板上的MySQL就一直启动失败
  14. 用于桌面虚拟化和远程访问图形要求苛刻的 CAD、EDA 应用程序的高级解决方案
  15. PMP|一文带你正确认识产品经理和项目经理的区别
  16. 关于Ubuntu下的PDF阅读器
  17. [iOS] AFNetworking 的内存泄漏分析
  18. Ethereum Introduction
  19. java.lang.NoSuchMethodError的解决办法
  20. transparent透明

热门文章

  1. C#窗体设计中ToolTip的简单用法
  2. php decimal类型,decimal是什么类型
  3. BP神经网络及拟合实例
  4. 杭州电子科技大学计算机面试题,杭州电子科技大学自主招生面试试题综合素质答案技巧...
  5. PAT1080 Graduate Admission (30)
  6. C语言编写web server
  7. tushare获取沪深300指数历史_从Tushare获取历史行情数据
  8. 利用mshta调用运行js或vbs的
  9. 2016-2017-2 《Java程序设计》预备作业2总结
  10. 数能低压 1.5A单通道 LED驱动IC芯片 NU405应用电路