题意:

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

 

相关文章:

  • 2021-08-08
  • 2021-10-23
  • 2021-08-07
  • 2022-12-23
  • 2022-12-23
  • 2021-08-17
  • 2022-01-16
  • 2022-03-07
猜你喜欢
  • 2021-10-21
  • 2022-01-17
  • 2021-12-12
  • 2022-02-02
  • 2022-12-23
  • 2021-06-15
相关资源
相似解决方案