题意:
给定一棵树,每个节点有一个点权,然后有一些询问,求以某个点为根的子树中有多少的数出现了恰好k次。
思路:
首先dfs一次将树形结构转化成线性结构,利用时间戳记录下以结点u为根的子树在数组中的开始位置和结束位置。
那么我们将所有查询记录下来离线来做,将所有的查询按右端点升序排序。
考虑用树状数组来做这道题,每个位置记录当前从1到当前位置有多少数出现了恰好k次。
从头遍历一遍数组,map离散化记录每个值出现的位置,对于每个位置,如果值出现的次数t大于k,那么在将第t-k次出现的位置加一,第t-k-1次出现的位置减二,如果在当前位置与某个查询的r相同,记录答案sum(r)-sum(l-1)
#include
#include
#include
#include
#include
#include
#include
#include