#1346. 数列计算

数列计算

F. Yamakasi

时间限制

  • 每个测试的时间限制:3秒
  • 每个测试的内存限制:256MB

题目描述

给定一个整数数组 a1,a2,,ana_1, a_2, \dots, a_n,以及两个整数 ssxx
请统计数组中**所有子段(连续子数组)**的数量,满足以下两个条件:

  1. 子段元素和等于 ss
  2. 子段中的最大值等于 xx

更正式地,统计满足 1lrn1 \leq l \leq r \leq n 的对 (l,r)(l, r),使得:

  • al+al+1++ar=sa_l + a_{l+1} + \dots + a_r = s
  • max(al,al+1,,ar)=x\max(a_l, a_{l+1}, \dots, a_r) = x

输入格式

  • 第一行输入一个整数 tt,表示测试用例的数量。(1t104)(1 \leq t \leq 10^4)
  • 每个测试用例的第一行输入三个整数 n,s,xn, s, x
    • 1n2×1051 \leq n \leq 2 \times 10^5
    • 2×1014s2×1014-2 \times 10^{14} \leq s \leq 2 \times 10^{14}
    • 109x109-10^9 \leq x \leq 10^9
  • 第二行输入 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n,表示数组 aa
    • 109ai109-10^9 \leq a_i \leq 10^9

保证所有测试用例中 nn 的总和不超过 2×1052 \times 10^5

输出格式

每个测试用例输出一行,表示满足条件的子段数量。

示例输入

9 1 0 0 0 1 -2 -1 -2 3 -1 -1 -1 1 -1 6 -3 -2 -1 -1 -1 -2 -1 -1 8 3 2 2 2 -1 -2 3 -1 2 2 9 6 3 1 2 3 1 2 3 1 2 3 13 7 3 0 -1 3 3 3 -2 1 2 2 3 -1 0 3 2 -2 -1 -2 -1 2 -2 -1 -1 -2

示例输出

1 0 2 0 2 7 8 0 0

说明

  • 第一个测试用例,符合条件的子段是 l=1,r=1l=1, r=1
  • 第三个测试用例,符合条件的子段是 l=1,r=1l=1, r=1l=3,r=3l=3, r=3
  • 第五个测试用例,符合条件的子段是 l=1,r=3l=1, r=3l=6,r=8l=6, r=8
  • 第六个测试用例,符合条件的子段是所有满足 r=l+2r = l + 2 的子段。
  • 第七个测试用例,符合条件的子段有:
    • l=1,r=7l=1, r=7
    • l=2,r=7l=2, r=7
    • l=3,r=6l=3, r=6
    • l=4,r=8l=4, r=8
    • l=7,r=11l=7, r=11
    • l=7,r=12l=7, r=12
    • l=8,r=10l=8, r=10
    • l=9,r=13l=9, r=13