北市赛后首po,也是 HOJ 的首po。

接下来的 80 天应该不会碰coding了吧= =。

题目很简洁,就是要你求 LIS 的个数。

可以先用 DP 把每个数字会放在 第几个 位置做出来 (pos[N])。

对每个位置开一棵 BIT,再重做一次 LIS,同时计算出做到当前 x 有几种可能 (cnt)。

也就是利用 BIT 把当前 x 所在位置 p,位置[p-1] 中所有比 x 小的数字的 cnt 加总,即为当前所有可能个数。

有点像 DP 的做完后,把 LIS 尾端的所有 cnt 加总就得到答案了。

因为记忆体的限制,所以我是直接开二维 vector,直接在 vector 弄 BIT= =。

我的code http://ideone.com/cIXjsu

p.s: 一直狂用 lower_bound XD。

 

相关文章