首页| 新闻| 娱乐| 游戏| 科普| 文学| 编程| 系统| 数据库| 建站| 学院| 产品| 网管| 维修| 办公| 热点
如果你知道分块的时间复杂度是O(n√),请忽略这篇博文。 如果你并不关心是怎么证明出来的,请忽略这篇博文。 如果你是神犇,请务必忽略这篇博文。 以下证明又是在数学课上瞎想,如果有误欢迎提出…… (数学老师我错了......) 1、规定符号 n:序列的长度; S:将这个序列分成S块; C:分成的每个块内有C个元素; x:查询或修改时,需要操作的整块数; y:查询或修改时,需要操作的零散区间中元素个数; L:查询或修改时,操作序列的长度。 通过符号规定,可以看出一定有:SC=n,x≤S,y<2C。 2、目的 通过分块,统一维护块内元素,查询时可以快速取出整块内答案,再与零散区间合并,达到降低时间复杂度的目的。(这种元素需满足区间加法维护的性质)。 因此,需要最小化修改与查询次数。即最小化x+y的值。 3、证明 ① 当最差情况下时,操作的区间为[2,n−1],此时需要查询S−2个块和2C−2个元素,即x=S−2,y=2C−2。 x+y=S−2+2C−2=S+2C−4。忽略常数,得x+y=S+C。 因SC=n,则C=nS。 代入,得 x+y=S+nS≥2∗S∗nS−−−−−√=2n√ 当且仅当S=nS,即S=n√时,等号成立。 所以在最坏时,时间复杂度为O(n√)。常数不超过3。 ② 在一般情况下时,可以得出L=xC+y。 移项,得x=L−yC。 因0<L≤n,0<y<2C,则0<L−y<n−2C。 因C>0,则L−yC<n−2CC=SC−2CC=S−2<S 故x+y<S+2C,忽略常数,x+y<S+C。 因SC=n,S+C≥2SC−−−√=2n√。 当且仅当S=C,即S=C=n√时,等号成立。 此时x+y<2n√。 综上,分块的时间复杂度为O(n√),常数不超过3。证毕。 分块中,S与C的取值可以任意,只是当S=C=n√时,时间复杂度最优。在有些JOI题目中(如[BZOJ4241] 历史研究)使用的S和C不是最优的,但是也可以A掉这种题。
索泰发布一款GTX 1070 Mini迷
AMD新旗舰显卡轻松干翻NVIDIA
索泰发布一款GTX 1070 Mini迷你版本:小机
芭蕾舞蹈表演,真实美到极致
下午茶时间,悠然自得的休憩
充斥这繁华奢靡气息的城市迪拜风景图片
从山间到田野再到大海美丽的自然风景图片
肉食主义者的最爱美食烤肉图片
夏日甜心草莓美食图片
人逢知己千杯少,喝酒搞笑图集
搞笑试卷,学生恶搞答题
新闻热点
疑难解答
图片精选
Dictionary数据类型在Darwin视频服
可穿戴手势识别控制器
网友关注