统计满足「窗口和 =ℓ2」的连续子段个数,其中 ℓ 为窗口长度。
关键观察:由 ∣vi∣≤100 可知任意长度为 ℓ 的子段和绝对值不超过 100ℓ。若要等于 ℓ2,必须 ℓ2≤100ℓ,即 ℓ≤100。因此合法窗口长度至多为 100,不必枚举更长区间。
做法:对每个左端点 L,向右最多扫描 100 个位置,维护前缀和并检查是否等于 ℓ2。多询问下 ∑n≤2⋅105,总复杂度可接受。
机房温感阵列回传了一条长度为 n 的整型读数序列 v1,v2,…,vn。巡检侧需要统计:有多少个非空连续窗口,其读数之和恰好等于窗口长度的平方。
具体地,对任意 1≤L≤R≤n,记窗口长度为 ℓ=R−L+1,窗口和为
vL+vL+1+⋯+vR。若该和等于 ℓ2,则计为一个合法窗口。请对每个询问给出合法窗口个数。
第一行一个整数 q(1≤q≤105),表示询问个数。
每个询问:
保证单个文件中所有询问的 n 之和不超过 2⋅105。
对每个询问输出一行一个非负整数,表示合法窗口个数。
输入
1
3
1 3 1
输出
4
说明
长度 1 要求单点读数为 1,下标 1 与 3 各贡献 1。长度 2 要求和为 4,窗口 [1,2] 与 [2,3] 的和均为 4。长度 3 要求和为 9,整段和为 5,不成立。合计 4。
输入
2
3
2 0 2
3
-2 1 1
输出
0
2
说明
第 1 个询问:各长度要求分别为 1,4,9,实际各子段和均对不上,答案 0。
第 2 个询问:两个单点 1 满足长度 1;其余长度均不满足,答案 2。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册