给定长度为 n 的数列,多次查询区间内不同数字的个数。
这是已经存在的问题,离线做法有莫队(O(nn))、树状数组(O(qlogn))等,在线做法有主席树(单次 O(logn))等。
考虑加入一种新的操作:单点修改,即改变数列中一个位置上的数字。
这时,原先的离线做法就不可用了,而主席树做法中单点修改操作的开销也会非常大。
请问是否存在一种数据结构,可以实现单次操作(单点修改、区间查询)O(logn) 的均摊复杂度(假设 n,q 是同级别的)?
如果不行的话,能做到 O(log2n)、O(n) 等稍慢的复杂度吗?
我在网上没有搜到关于该问题的做法;如果处理这类问题的数据结构已经存在,也请推荐相关文章。