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

 

posted @ 2014-07-04 21:34  NanoApe  阅读(109)  评论(0编辑  收藏  举报
AmazingCounters.com