题目大意:
要求对a[]单点更新和询问和.
和的形式:
s的定义:

题目思路:
小小抱怨一下,这题到比赛结束时居然才10几人搞出来,真坑爹= =...
很明显线段树直接上,入手处2<=z<=6,结点上保存z=2~6的各个和.
从s的定义知道,1<=s<=z,z最大是6,而且我们还发现,s是一个循环的数列:1,2,3,...,z,z-1,z-2,...,1,所以向上更新即为
sum[rt][z][i]=sum[ls][z][i]+sum[rs][z][(i+左子的长度)%cf[z]],cf[z]表示循环节长度.
代码:
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include