「科技」区间众数

序列长\(n\),询问\(Q\)

离线

莫队呀,由于众数不好删除,直接回滚莫队即可,时间复杂度\(o(n \sqrt n)\),空间$o(n) $。

在线

分块啊。

设块大小为T。

first

其实可以沿用回滚莫队思想,记录\([l,r]\)块里的数的\(cnt\),时间复杂度\(\displaystyle o({n^3 \over T^2}+ TQ)\),空间复杂度\(\displaystyle o({n^3 \over T^2})\)。T取\(n^{2 \over 3}\)最优。

second

略微优化,实际上询问时对于\([l,r]\)的块里数只需知道众数,然后对于边角上的数知道在询问区间出现次数即可。

预处理\([l,r]\)块的众数,时间复杂度$o(n \sqrt n) $。

询问一个数在区间出现次数 可以记录前缀和,总时空复杂度均为\(o(n \sqrt n)\),也可以用vector存同类数出现位置,在vector上二分,时间复杂度\(o(n \sqrt {nlog(n)})\),空间复杂度\(o(n)\)

third

序列中每个数记录在vector里出现的位置\(X\)

当前的答案为ANS,

对于左端边角,若vector中下标ANS+X的位置 \(\leq r\),那么++ANS。

对于右端边角,若vector中下标ANS-X的位置 \(\geq l\),那么++ANS。

显然,ANS最多只会被增加\(2 \sqrt n\)次(ANS基于中间所有的整块的众数,最多只会多上 边角的数的数目)。

时间复杂度\(o(n \sqrt n)\),空间复杂度\(o(n)\)

好像还有更好的科技...不会。

例:

「Violet」蒲公英

「Ynoi2019模拟赛」Yuno loves sqrt technology III

转载于:https://www.cnblogs.com/klauralee/p/10856027.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值