1
var RangeFreqQuery = function (arr) {3
this.subRangeSize = Math.sqrt(this.array.length) >> 0;4
this.subRangeFreqs = [];8
for (let i = 0; i < arr.length; i++) {11
if (i >= this.subRangeSize && i % this.subRangeSize === 0) {12
this.subRangeFreqs.push({ ...freq });16
freq[num] = (freq[num] || 0) + 1;19
this.subRangeFreqs.push(freq);22
RangeFreqQuery.prototype.query = function (left, right, value) {25
const leftIdx = (left / this.subRangeSize) >> 0,26
rightIdx = (right / this.subRangeSize) >> 0;28
for (let i = leftIdx; i <= rightIdx; i++) {29
fr += this.subRangeFreqs[i][value] || 0;32
for (let i = leftIdx * this.subRangeSize; i < left; i++) {33
fr -= this.array[i] === value ? 1 : 0;38
i < Math.min((rightIdx + 1) * this.subRangeSize, this.array.length);41
fr -= this.array[i] === value ? 1 : 0;