题目链接
题意
支持序列三种操作:
1.求(l,r)区间和。
2.执行代码”for (int i=l;i<=r;i++) A[i]=A[i-k];”
3.将区间(l,r),序列还原。
思路
可持久化treap,在无旋treap的基础上发展而来,这道题算是我的第一次可持久treap吧。
要注意的一个是操作二,有可能涉及到一个区间重复很多遍,我们可以用类似快速幂的操作将这个区间复制到一个目的长度。
还有要及时回收多余的结点,暴力重建整棵树。
1 |
|
支持序列三种操作:
1.求(l,r)区间和。
2.执行代码”for (int i=l;i<=r;i++) A[i]=A[i-k];”
3.将区间(l,r),序列还原。
可持久化treap,在无旋treap的基础上发展而来,这道题算是我的第一次可持久treap吧。
要注意的一个是操作二,有可能涉及到一个区间重复很多遍,我们可以用类似快速幂的操作将这个区间复制到一个目的长度。
还有要及时回收多余的结点,暴力重建整棵树。
1 | #include<bits/stdc++.h> |