CF1352E Special Elements
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;
}
}

浙公网安备 33010602011771号