(《算法竞赛进阶指南》P39-40)
问题:给定长度为 n 的数列 a,而后进行若干次询问,每次给定一个整数 T,求出一个最大的 k,满足∑i=1kai<=T。
思路零:模拟
思路一:二分
思路二:倍增
若询问次数与 n 相当,那么三个思路的复杂度分别为 O(n2)、O(nlogn)、O(nlogk),理论上,倍增能够应对规模各异的 k,应是比二分快的。
可是为何我在进行对拍时发现倍增的那份程序有好几个点用时超过 1s,而二分则没有这样。
对拍所用代码:gen.cpp; checker.cpp