CF1352E Special Elements

题意:给你\(a\)数列,让你判断其中的每个元素是否能写成数列中几个连续元素之和,并统计个数。

这道题乍一看维护前缀和,枚举端点查找。\(O(n^2*t)\)的复杂度,但是一些特性让它的跑不满,就可以过了。

几个非常有意思的数据范围包括:\(1\leq n\leq 8000,1\leq a_i \leq n\)

注意到他让你求的并不是任意一个数,而是\(a_i\),并且\(1\leq a_i \leq n\),也就是说他让你找的数其实只是在一到八千的范围内。对于枚举的\(l\),如果\(sum[r]-sum[l-1]>8000\),就不需要接着枚举\(r\)了。

那么处理前缀和,再开8000个桶分别装每一个数据就可以了

for (int l = 1; l < n; l++) 
{
	for (int r = l + 1; r <= n; r ++) 
    {
		int sum = b[r] - b[l - 1];
		if(sum<=n) vis[sum]++;
		else break;
	}
}

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-19
  • 2021-08-26
  • 2021-09-08
  • 2021-12-27
  • 2021-07-29
猜你喜欢
  • 2021-06-08
  • 2022-12-23
  • 2021-08-22
  • 2021-05-12
  • 2021-12-08
  • 2022-02-27
  • 2021-10-28
相关资源
相似解决方案