【题目链接】
【思路要点】
- 不妨令 M M M 为 2 2 2 的次幂。
- 可以发现题目中的初始序列满足:序列的前一半或后一半完全相同,序列的另一半递归地满足该性质。
- 并且,两个满足该性质的序列卷积后同样满足该性质。
- 因此,可以用 O ( L o g M ) O(LogM) O(LogM) 个数描述序列,并在 O ( L o g M ) O(LogM) O(LogM) 的时间复杂度内完成卷积。
- 时间复杂度 O ( N L o g M + Q L o g M ) O(NLogM+QLogM) O(NLogM+QLogM) 。
【代码】
#include<bits/stdc++.h> using namespace std; const int MAXN = 7e5 + 5; const int MAXLOG = 21; const int P = 998244353; typedef long long ll; typedef long double ld; typedef unsigned long long ull; template <typename T> void chkmax(T &</