给定该阵列上的数组A [1..n]和Q查询。
每个查询的格式为(xab),对于我需要查找的每个查询,由A [a..b]表示的主数组的子数组(a,b)中有多少元素小于x。
如何有效地完成这项工作?
或者如果需要在数组之上构建什么样的数据结构,以便有效地执行工作?
限制:
n <= 10 ^ 6
Q&lt; = 10 ^ 4
答案 0 :(得分:2)
使用Fenwick tree存储您看过的值的累积直方图。
将您的查询(x a b)转换为F(x,a)-F(x,b-1),其中F(x,a)计算0 ... a范围内小于x的数字。
按照。
对这些F(x,a)查询进行排序然后迭代数组索引i,将元素A [i]插入Fenwick树,并回答任何具有== i的F(x,a)查询。