U172682 冷门trick: 单调区间线性求和

题目背景

(与题意无关) 这玩意是啥? 这是一个听人随口提到的冷门技巧,可以在线性时间内求出“单调区间”的“和”。它只能查询,对查询还有要求,并且不支持修改 什么是“单调区间”?不是指区间里的数单调,是指区间的左端点/右端点 **都** 单调递增 什么是 “和”?只要可以合并,有结合律,都可以,甚至可以没有交换律。当然,肯定也不单单是simple的加起来。 为什么要有这样的东西? 前缀和固然很快,但它要信息可减;线段树固然适用范围广,但它多一个log。 而这个东西,不但快,在特定条件下,也能解决很多东西。 关于讲解:在 [这里](https://www.cnblogs.com/LightningUZ/p/15115111.html)

题目描述

现在你要做一个很简单的问题:给你一个序列 $a$,长度为 $n$。你要支持 $q$ 个询问,每次询问给出 $l_i,r_i$,求 $\prod\limits_{j=l_i}^{r_i} a_j$,对 59861874 取模。 #### 保证 $l_i,r_i$ **分别递增**。

输入格式

首先输入 $n,q$,然后给定一个 $seed$。接下来用如下代码生成 $a_i,l_i,r_i$: ```cpp int uu=1; int rnd() {uu=uu*seed%100003; return (uu

输出格式

假设第 $i$ 个询问的答案(模$59861874$之后)是 $q_i$,输出 $\prod\limits_{i=1}^{n} (i\times 114514+(q_i\oplus1919810)) \mod 998244353$。$|$ 表示按位或运算。

说明/提示

### 样例解释 自己写个暴力看看 ### 数据范围 $n\le 10^7,q\le 10^7,seed\le 10^8$ $l_i\le r_i$ $l_{i-1}\le l_i,r_{i-1}\le r_i$ ### 备注 $59861874=2\times 3\times 997\times 10007$,是合数 相当于数据是随机生成的,不过对于这个题影响不大 您当然可以注意到很多 $r$ 都等于 $n$,特殊处理掉后面几个的后缀和然后线段树