BZOJ-1878 HH的项链

题意:

给一串数C[1..n],对于每次询问[i,j],给出C[i..j]中有多少个不同的数。

此题可用离线做法。

先对每个询问排序,并求出Pre[1..n](Pre[i]表示C[1..i-1]中与C[i]相同且离C[i]最近的数的下标,如没有则为0)

然后建一个树状数组Tree,i依次取值为1..n。

先把Tree[Pre[i]+1..i]加一,然后查看有没有哪个询问的End是i,如果有的话那个询问的答案为Tree[询问的Begin]。

不知道你看懂了没。。。

Code:

http://ideone.com/FZbswC

原文地址:https://www.cnblogs.com/NanoApe/p/4396759.html