雅礼集训Day2T2 color(各种暴力优化) (O(1)RMQ的妙用)

130 篇文章 1 订阅
92 篇文章 0 订阅

题意:

长度为n的数列A,m次询问,每次给出一个区间,求区间内不同数字的种数。

还有一堆恶心的限制。

1.强制在线(暴力优化神器莫队直接被ban)

2.内存8M (并不是特别暴力的主席树和线段树被疯狂针对)

3.1s,上述所有数字都是1e5级别的(暗示考点:卡常数(底层优化))。

part1:

卡内存怎么办?

tsy大佬说过,当线段树被卡内存时就要分块。

tsy大佬还说过,分块这么简单,不就是个优化的暴力吗?

part2:

分块怎么统计不同数字啊?

每个块开数组存有那些数字啊!

这不会TLE + MLE(2000000的int就MLE了)吗?

废话这当然会TLE+MLE。

接下来有请bitset出场,它给我们的空间及时间常数因子上除了个w

现在我们时间复杂度为O(n*sqrt(n)*n/w),空间复杂度为O(n*sqrt(n)/w)

现在总算不MLE了,好像还有点充裕。

bitset属于底层优化,最有效的一种暴力优化.

part3:

TLE怎么破?(加不加bitset一个分,心疼自己一波)

可以发现分块时段在合并时总复杂度为O(sqrt(n)*n/w)而段外的暴力复杂度仅为O(sqrt(n))

考虑优化段合并.这能优化吗?

当然能,存一下每两个段之间的的部分的数字种类(用bitset),就变成O(n/w)辣。(思路超暴力)

这不会MLE吗?

废话这当然会MLE。

part4:

看一下我们之前的空间复杂度,为O(n*n/w)

下面来一种高级的暴力优化,O(1)RMQ

我们把每两个段改为(i与i+2^j)

空间复杂度O(n*log n  / w)

RMQ怎么求数字种类?

或起来不就行了吗。(当维护的值可以不用去重比如说求max,min,或时可以O(1)RMQ,真是太套路了)

 时间复杂度 O(n*n/w+n*sqrt(n))

n=100000,w=32

这,300000000过1s?(写8个0以悼念出题人)

part5:

答  : 谁和你说w=32了。

问   :难道bitset不是32位的吗?

答   :难道像我这样优(du)秀(liu)的出题人会用STL?自己用long long写。

问   : 。。。。。。可是作为一名优(du)秀(liu)的出题人你需要开3倍时限啊,你的标程1.5亿跑0.3s?

答   :   我把只出现一次的数字挑出来特殊处理,剩下的数字只有50000种,0.2s随便过。

。。。。。。

送出题人一句话:如果暴力不是为了杀戮,那将毫无意义。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值