HDU 4358 Boring counting(樹狀數組)
題意: ??
給定一棵樹,每個節點有一個點權,然後有一些詢問,求以某個點為根的子樹中有多少的數出現了恰好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