Here's the add/remove logic:
function add(value)
freqCount[cnt[value]] := freqCount[cnt[value]] - 1
cnt[value] := cnt[value] + 1
freqCount[cnt[value]] := freqCount[cnt[value]] + 1
if cnt[value] > maxFreq then
maxFreq := cnt[value]
function remove(value)
freqCount[cnt[value]] := freqCount[cnt[value]] - 1
cnt[value] := cnt[value] - 1
freqCount[cnt[value]] := freqCount[cnt[value]] + 1
if freqCount[maxFreq] = 0 then
maxFreq := maxFreq - 1
Both are . The query answer is .