题目要求预处理所有可能的长度 L 对应的区间能量值之和,然后回答 q 次查询。由于 n 与 q 的总和均可达到 3×105,必须在线性或接近线性的时间内完成预处理。
核心观察:
你有一个长度为 n 的非负整数序列 A=[A1,A2,…,An]。对于任意区间 [l,r](1≤l≤r≤n),定义其“能量值”为 Al×Al+1×⋯×Ar,即 ∏i=lrAi。如果某个区间的能量值严格大于 109,则将其视为 0。现在需要进行 q 次查询,每次查询给定一个整数 L,请你计算所有长度恰好为 L 的区间的能量值之和。
输入包含多组测试数据。第一行包含一个整数 T(1≤T≤103),表示数据组数。保证所有测试数据中 n 的总和不超过 3×105,q 的总和也不超过 3×105。序列中的每个元素 Ai 满足 0≤Ai≤109,每次查询的 L 满足 1≤L≤n。
第一行包含一个整数 T,表示测试数据组数。接下来依次描述每组数据: 每组数据的第一行包含两个整数 n 和 q,分别表示序列长度和查询次数。 第二行包含 n 个整数 A1,A2,…,An,表示序列中的元素。 接下来 q 行,每行包含一个整数 L,表示一次查询的长度。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.