2578-探险


本文总阅读量

数列分段模板题求的是最大值最小,所以验证的时候,每一个分段之和不能超过答案
而此题是最小值最大,也就是每一个分段之和要大于或等于答案
那么在验证的时候,如果分段之和大于或等于答案,意味着找到一段。

bool check(int x)
{
	int sum = 0, cnt = 0;
	for(int i = 1; i <= n; i++){
		sum += a[i];
		if(sum>=x){ //达到标准,注意,此时a[i]属于当前这段区间
			sum = 0;
			cnt++;
		}
	}
	return cnt>=k;
}

因为找的是最小值,达到或超过都是符合要求,所以接下来要重新计算,sum要清零。这里还需要注意的是最后剩下的一段并不符合要求(达不到x,所以不能统计进去)。
答案区间跟数列分段的最大值最小不同,可以从0开始,极端情形,每个数自成1段。


本站总访问量