题目名称 | 3231. 蒲公英 |
---|---|
输入输出 | Dandelion.in/out |
难度等级 | ★★★☆ |
时间限制 | 2000 ms (2 s) |
内存限制 | 256 MiB |
测试数据 | 20 |
题目来源 | LGLJ 于2019-08-23加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:17, 提交:43, 通过率:39.53% | ||||
┭┮﹏┭┮ | 100 | 2.255 s | 140.22 MiB | C++ |
lihaoze | 100 | 2.885 s | 90.44 MiB | C++ |
增强型图元文件 | 100 | 2.981 s | 32.03 MiB | C++ |
LGLJ | 100 | 3.570 s | 223.68 MiB | C++ |
LGLJ | 100 | 3.571 s | 210.99 MiB | C++ |
LGLJ | 100 | 3.587 s | 223.40 MiB | C++ |
Hale | 100 | 3.734 s | 15.56 MiB | C++ |
lihaoze | 100 | 3.962 s | 8.78 MiB | C++ |
数声风笛ovo | 100 | 4.019 s | 235.98 MiB | C++ |
op_组撒头屯 | 100 | 4.110 s | 112.77 MiB | C++ |
本题关联比赛 | |||
SYOI 专题 4:分块(根号杂烩) |
关于 蒲公英 的近10条评论(全部评论) | ||||
---|---|---|---|---|
稍微卡内存
| ||||
参考clj大佬论文《区间众数命题报告》,预处理每个块中数的数量,相比《进阶指南》的二分做法效率显著提高(具体来说,同开O2的情况下快了将近1s),时间复杂度从$O((n + m) \sqrt n \log n)$ 优化至 $O((n + m) \sqrt n)$。唯一的缺点就是代码难度剧增(调试起来很痛苦,比如我数组大小是按照 $O(n^{1.5})$ 来的,但是分块大小还是选择的 $O(\sqrt{n \log n})$,导致调试了一下午发现不了问题,包括边界问题也调整了半天)。至于WJMZBMR神犇的论文可以参考这里 Onedrive,很有参考价值
lihaoze
2022-08-24 21:02
2楼
| ||||
神仙分块,费脑子还费时间
|
亲爱的哥哥:
你在那个城市里面过得好吗?
我在家里面最近很开心呢。昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也被它杀掉了。我觉得把那么可怕的怪物召唤出来的那个坏蛋也很坏呢。不过奶奶说他是很难受的时候才做出这样的事的……
最近村子里长出了一大片一大片的蒲公英。一刮风,这些蒲公英就能飘到好远的地方了呢。我觉得要是它们能飘到那个城市里面,让哥哥看看就好了呢!
哥哥你要快点回来哦!
爱你的妹妹 $\rm Violet$
$\rm Azure$ 读完这封信之后微笑了一下。
“蒲公英吗……”
在乡下的小路旁种着许多蒲公英,而我们的问题正是与这些蒲公英有关。
为了简化起见,我们把所有的蒲公英看成一个长度为 $n$ 的序列 ($a_1,a_2..a_n$),其中 $a_i$ 为一个正整数,表示第 $i$ 棵蒲公英的种类编号。
而每次询问一个区间 $[l,r]$,你需要回答区间里出现次数最多的是哪种蒲公英,如果有若干种蒲公英出现次数相同,则输出种类编号最小的那个。
注意,你的算法必须是在线的。
第一行两个整数 $n,m$,表示有 $n$ 株蒲公英,$m$ 次询问。
接下来一行 $n$ 个空格隔开的整数 $a_i$, 表示蒲公英的种类。
再接下来 $m$ 行每行两个整数 $l_0,r_0$,我们令上次询问的结果为 $x$(如果这是第一次询问,则 $x=0$)。
令 $l=(l_0+x-1) \bmod \ n +1,r=(r_0+x-1) \bmod \ n +1$,如果 $l>r$ ,则交换 $l,r$。
最终的询问区间为 $[l,r]$。
输出 $m$ 行。每行一个整数,表示每次询问的结果。
6 3 1 2 3 2 1 2 1 5 3 6 1 5
1 2 1
对于 $20$% 的数据,保证 $1≤n,m≤3000$。
对于 $100$% 的数据,保证 $1≤n≤40000,1≤m≤50000,1≤a_i≤10^9$。
《算法竞赛进阶指南》