这题……做法很多吧。据说莫队玄学多交几次就AC了。 题目要我们查询两个区间的不同的数的个数。我们先考虑一个区间内的做法。 这是一个经典的问题?(自行百度) 在线做法的话,只需要用可持久化线段树维护前个数中每个数最后一次出现的下标。 这样在扫一边的时候,如果某个数在前面出现过,就只要把前面的那个删掉,加上这个就好。 代码如下: for (int i = 1; i <= n; i++) { int v = a[i]; if (~last[v]) { int t = update(last[v], root[i - 1],...