摘要: 首先说说什么是分块。所谓分块就是将规模为n的问题划分为就是将规模为n问题划分为k块,每块规模为s。那么对块内的操作和整个范围内的操作的复杂度要平均,即令k=s=sqrt(n)通过这个思想可以把O(n)的复杂度降到O(sqrt(n)),达到优化算法的目的。看道例题:BZOJ 1257[CQOI2007]余数之和sum:中文题,题目就是求而可以通过变换得到:转换到这步的时候。注意到对于某些连续的i,[k/i]的值是相同的。我们可以在O(1)的时间求出[k/i]相同的时候i*[k/i]的和。注意一下当i>k的时候k mod i的值是k。所以总的复杂度是O(sqrt(k))。代码君:View C 阅读全文
posted @ 2013-04-22 21:33 SDU_Phonism 阅读(364) 评论(0) 推荐(0) 编辑