题意:
hdu4288
有3种操作:1.往集合里加入元素 2.删除集合里的元素 3.对集合里下标模5等于3的元素求和
加入和删除元素就是线段树里的单点更新,但第三种操作就不那么显然了。由于需要求和的元素都是模5等于3的等间隔的点,当我们对一个节点进行更新的时候,它的左子结点的满足条件的下标在这个节点肯定也满足条件,但右子节点模5等于3的下标并不是这个节点的模5等于3的下标,因为当我们计算右子节点的时候下标从1开始计算,而在当前节点的时候右子节点的下标是从左子结点的最后一个下标开始算的,所以我们用一个数组cnt来记录每个节点所在区间有多少点,每个节点有一个sum【5】数组记录它的模5的每个值的下标代表的值的和。这样当前节点rt的sum【rt】【i】=sum【左子结点】【i】+sum【右子节点】【i-左子结点数的个数】。
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include