P6308 「Wdsr-1」笨蛋结构

题目背景

众所周知,琪露诺是笨蛋。

题目描述

琪露诺希望维护一个长度为 $n$ 的整数序列 $a$,初始值都为 $0$。 现在琪露诺想要进行 $q$ 次操作,每次选择序列中的一段区间 $[s,s+l-1]$ 并给出两个数字 $w,k$,使对所有的 $i \in [1,l]$,$a_{s+i-1}$ 加上 $w\times i^k$ 。 琪露诺不希望 $k$ 很大,因此她给出了一个整数 $m$,满足 $0\le k\le m$。 为了不让头脑简单的琪露诺感到困惑,你只需要输出 依次进行完所有操作后,序列中的每个数字对 $2^{64}$ 取模(即 $\text{unsigned long long}$ 自然溢出)后的结果即可。 为了帮助你更好的理解题意,这里给出一段伪代码: $$\def\b#1{\textbf{ #1 }}\def\t#1{\text{ #1 }}\def\s{\quad} \def\l{\underline{\kern{300pt}}\cr[-10pt]} \def\r{\overline{\underline{\kern{300pt}}}} \begin{aligned} &\r\cr&\b{Algorithm:}\t{An easy structure}\cr[-13pt]&\l\cr &\begin{aligned} \t{1.}&\b{input}n,m,q \cr \t{2.}&\b{for}i=1\b{to} q \b{do} \cr \t{3.}&\s\b{input} s,l,w,k \cr \t{4.}&\s\b{for} j=1 \b{to} l \b{do}\cr \t{5.}&\s\s a[s+j-1] \gets a[s+j-1]+w\times \t{pow}(j,k) \cr \t{6.}&\s\b{end}\cr \t{7.}&\b{end}\cr \t{8.}&\b{for} i=1 \b{to} n \b{do}\cr \t{9.}&\s\b{output} a[i]\cr \t{10.}&\b{end}\cr \end{aligned}\cr[-12pt] &\r\end{aligned} %Made by @离散小波变换° . %You can find his contributions by searching "JoesSR". $$ 其中 $\rm pow(a,b)$ 的含义为 $a^b$。

输入格式

请调用下方代码的 `input(n,m,q,S,L,W,K)` 来输入 $n,m,q,s_i,l_i,w_i,k_i$。下标**从一开始**。 其中 $s,l,w,k$ 的含义与题目描述保持一致。

输出格式

请调用下方代码的 `output(n,R)` 进行输出。其中 $R_i$ 为所有操作结束后的数列,下标**从一开始**。

说明/提示

#### 样例一说明 生成的数据为: ```plain 10 0 5 7 1 1558211206 0 1 3 401324017 0 4 5 235225636 0 6 4 2137131141 0 1 2 3791175968 0 ``` 它的结果是: ```plain 4192499985 4192499985 401324017 235225636 235225636 2372356777 3930567983 2372356777 2137131141 0 ``` --- #### 数据生成&数据输出 ```cpp typedef unsigned long long u64; typedef unsigned int u32; u32 MT[624],idx; void _init(u32 seed){ MT[0]=seed; idx=0; for(int i=1;i>30)+i)); } void _gene(){ for(int i=0;i>1); if(x&2)MT[i]^=0x9908b0df; } } u32 _calc(){ if(!idx) _gene(); int x=MT[idx]; x^=x>>11,x^=(x