码迷,mamicode.com
首页 > 其他好文 > 详细

【BZOJ 1878】HH 的项链

时间:2018-02-13 13:29:56      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:lower   []   需要   移动端   gpo   问题   div   限制   求和   

已知: $n(10 ^ 5) $

? \(\left\{ a_i \right\}(10 ^ 5)\)

? \(t(10 ^ 5)\)

条件: 区间 \([l, r]\)

求: 不同数个数

思考每个细节,我能想到这些东西:

多组询问 —— 离线,在线

区间 \([l, r]\) —— 莫队

? 移动 \(r\) ,维护所有 \(l\) 的答案

? 线段树

? 可持久化线段树

? 分块

不同数 —— cnt, v[]

? —— 只考虑最后一个,把最后一个的权值当作 \(1\)

? —— \(l \le i \le r, pr[i] < l\)

考虑莫队算法,移动端点的时候维护 cnt, v[] 即可,时间复杂度为 \(O(n \sqrt n)\)

我能简化这个结果吗?

直观地感受一下?

我能不能用其他方式推导出这个结果?

莫队算法,以及第一种描述方式的意义不大了,看看能不能用第二种对不同数的描述方式。

把询问离线,移动右端点,用树状数组维护点权,区间求和,时间复杂度为 \(O(n \log n)\)

我能简化这个结果吗?

可以使用线段树。

直观地感受了一下?

如果要求强制在线呢?

我把线段树可持久化就好了。

还有没有其他做法?

第三种做法的实用性应该才是最高的,它只需要满足两个数量关系。

使用树套树来限制两个条件,可以直接解决这个问题。

直观地感受一下?

能不能移动端点?

显然也是可以的,维护一棵线段树,如果要求强制在线,那么就可持久化线段树。

直观地感受一下?

区间问题通常还可以分块,我能分块做吗?

把序列分块,每块按照 \(pr[]\) 排序,每次 lower_bound 一下就好了。

直观地感受一下?

【BZOJ 1878】HH 的项链

标签:lower   []   需要   移动端   gpo   问题   div   限制   求和   

原文地址:https://www.cnblogs.com/Sdchr/p/8446422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!