首先读完题,仔细观察一下,如果按照常规写法,那么对于每一个宗教来说都应该储存当前宗教下所有城市的评价,即建立C棵线段树去维护宗教下的所有城市,但是这里如果直接开数组维护很明显会爆内存,观察到由于每个宗教来说并不是所有城市都为有效值,而只是部分城市,考虑到这一点,可以选择动态的在线段树上开结点去维护城市评价。
对于动态开结点的操作,我是这么处理的,首先开一个大数组表示结点,前100000个表示宗教的头结点,不进行申请空间,0表示终端结点下标,在update中,首先假装这个区间所有结点存在,那么向下递归一个结点,如果该结点不存在,那么申请一个空下标,并且与上一层的父节点相连接,再给这个下标赋值与更新,那么这样以来需要申请的结点最多为n*logn个,注意在每次使用完结点后需要进行清空。
#include
#include
#include
#include
#include
#include
#include