博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj2002
阅读量:6379 次
发布时间:2019-06-23

本文共 411 字,大约阅读时间需要 1 分钟。

这道题学习了一种简洁的解决一些数据结构题的方法——分块法

这道题方法很多,但分块写起来只有1kb左右,非常的简洁(但不是非常的高效)
首先很容易思考到一种暴力的做法,从后往前推,很容易搞出每个点会弹几次弹出,
这样询问是O(1),但修改一个弹力系数必须把之前会弹到这个点的步数都要修改,因此我们使用分块优化
我们把数列划分成一个个大小为[sqrt(n)]的块(最后一块大小具体计算),
令f[i]表示弹出i所在块所用的次数,p[i]表示最终弹出i所在块后弹到下一块的位置
首先f[i],p[i]都是可以预处理出来的
然后查询,显然我们只要最多遍历块的个数 是O(sqrt(n))
修改,我们只要修改这个点之前,且属于同一个块的点即可,最坏也是O(sqrt(n))
这样总的复杂度为O(m*sqrt(n))

 View Code

 

转载于:https://www.cnblogs.com/phile/p/4473126.html

你可能感兴趣的文章
【转】以过来人的身份聊聊实习招聘、秋招、春招(给应届毕业生)
查看>>
英文论文润色的问题
查看>>
myeclipse异常关闭导致tomcat无法启动如何解决
查看>>
LeetCode 265: Paint House II
查看>>
matlab-调用摄像头人脸识别
查看>>
Proud Merchants详细解答
查看>>
笔记本建立wifi热点的实用详细步骤
查看>>
matlab使用常犯的错误
查看>>
Go语言的big包实现大整数运算
查看>>
Graphviz样例之无向图
查看>>
CCF201609试题
查看>>
CCF201403-1 相反数(解法二)(100分)
查看>>
Python软件目录结构
查看>>
C#之运算符重载
查看>>
SharePoint 2013 实战碎嘴(ECMAScript客户端对象模型): 提示某个列表不存在
查看>>
4.Heredoc结构形式
查看>>
python socket网络编程
查看>>
Daily Scrum9 11.13
查看>>
C语言学习笔记(一)_hello world
查看>>
软件质量
查看>>