记 (f_{i, j} (0 le j le 2)) 为 (sum^{n - 1}_{i = 0} inom{3i + m}{x}) 的值,则对于一个询问 (x),答案为 (f_{x, 0} + inom{3n}{x})。
那么显然有:
- (f_{i, 0} + f_{i, 1} + f_{i, 2} = inom{3n}{i + 1})。
- (f_{i, 1} = f_{i, 0} + f_{i - 1, 0})。
- (f_{i, 2} = f_{i, 1} + f_{i - 1, 1})。
- 边界条件 (f_{0, 0} = f_{0, 1} = f_{0, 2} = n)。
根据上述式子预处理递推求出 (f) 即可,时间复杂度 (Theta(n + q))。
代码很简单就不放了。