题意
给一个长度为n的序列,每次询问把一个区间内的数转换成哈夫曼编码需要的最小长度。哈夫曼编码就是把每个字符映射到一个01串,要求对于两个不同的字符,其中一个的编码不能是另一个的前缀。
n,ai,q≤100000 n , a i , q ≤ 100000
分析
显然我们可以把每个字符出现的次数看作是权值,然后建一棵哈夫曼树的代价即为答案。
用莫队维护每个数的出现次数,然后对于出现次数不大于 n−−
给一个长度为n的序列,每次询问把一个区间内的数转换成哈夫曼编码需要的最小长度。哈夫曼编码就是把每个字符映射到一个01串,要求对于两个不同的字符,其中一个的编码不能是另一个的前缀。
n,ai,q≤100000 n , a i , q ≤ 100000
显然我们可以把每个字符出现的次数看作是权值,然后建一棵哈夫曼树的代价即为答案。
用莫队维护每个数的出现次数,然后对于出现次数不大于 n−−