题目链接
传送门
题意
初始时有\(n\)个空串,然后进行\(q\)次操作,操作分为以下两种:
- wrap l r x:把\(l,r\)中的每个字符串的首尾都加入\(x\),如\(s_i=121,x=3\rightarrow s_i=31213\);
- query l r:查询\(\sum\limits_{i=l}^{r}s_i\)。
思路
线段树。
对于每个结点我们存下这个区间的区间和\(sum1\),区间长度\(sum2\)(由于区间内的数操作次数不同会导致数的位数不同所以我们用\(10^x\)来表示叶子结点长度,然后往上累加得到每个区间的长度),高位添加的数的懒惰标记\(lazy1\),低位添加的数的懒惰标记\(lazy2\),位数的懒惰标记\(lazy3\),然后进行线段树区间更新\(+\)区间查询即可……注意理清思路别写\(bug\)。
代码实现如下
#include
#include