P16117 [USTCPC 2026] Evil Counting Problem

题目背景

“呜哇——!怎么会有这么奇怪的数组啊!” 克露丝卡尔酱盯着黑板上写满的 $+1$ 和 $-1$,整个人都不好了。 “前辈前辈!”后辈拽着她的袖子,“如果给你一个区间,里面的数字可以随便重新排列,那有多少种排法能让所有连续子段的乘积加起来正好等于 $k$ 呢?” 面对那双闪闪发亮的眼睛,克露丝卡尔酱只能硬着头皮接下了这个挑战。 唉,今天的社团活动,似乎又不太平静呢……

题目描述

给定长度为 $n$ 的数组 $a$,每个元素都是 $\pm 1$ 之一。 给定常数 $k$ 以及 $q$ 次询问,每次询问指定 $l,r$,计算:假如你可以任意排列 $[l,r]$ 下标范围内的元素,有多少种排列方式,使得新数组(长度仍为 $n$)的所有非空子段乘积之和(即 $\sum_{i\le j}\prod_{t\in[i,j]}a_t$)为 $k$。结果对 $998244353$ 取模。 注意:即使两个不同的排列得到的数组完全相同,也将它们视为不同的排列。

输入格式

**本题有多组测试数据。** 首先输入一行,包含一个整数 $T$($1\le T\le 10^5$),表示测试数据组数。 每组数据首先输入一行,包含三个整数,分别表示数组长度 $n$ ($1\le n\le 10^5$)、常数 $k$ ($\lvert k\rvert\le\frac{n(n+1)}{2}$)、询问总数 $q$ ($1\le q\le 10^5$)。 接下来输入一行,包含 $n$ 个整数,其中第 $i$ 个整数表示 $a_i$,满足 $\lvert a_i\rvert=1$。 接下来输入 $q$ 行,每行包含两个整数,其中第 $i$ 行的两个整数分别表示第 $i$ 次查询的 $l_i,r_i$ ($1\le l_i\le r_i\le n$)。 保证 $\sum n,\sum q\le 10^5$。

输出格式

输出 $\sum q$ 行,每行一个整数,表示询问结果。

说明/提示

对于第一组样例的第一次询问,必须将前四个元素排列为 $(1,-1,1,-1)$ 或 $(-1,1,-1,1)$,共有 $8$ 种排列方式满足要求。