题意:
给一串数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