【口胡】Ynoi刷题记录
[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)次。
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17530351.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」