8.16美团笔试
全部评论
就做出来这一个,直接三个for循环
是双机位吗
py平方复杂度过42%,听说C++立方复杂度加剪枝就能过50%
果然C++都是人上人
会线段树就是送分题,不会的话不可能 AC 的,数据量那么大
离散化后维护正序对数组,本质上题目要求的就是对于每个 i,i 右侧的正序对数量,但正序对需要满足一个前提是不能超过 a[i]。
所以逆序遍历,维护一个 f[x] 表示截至目前为止,正序对最大值为 x 的正序对数量,那么遍历到 i 的时候,此时的贡献就是 f 数组的 1 ~ a[i] - 1 这一段的区间求和,因为这一段的正序对就没超过 a[i]。
接着就是要更新 f 数组,也就是说要把 a[i] 也给***去,插的时候比较直观的就是 a[i] 会对 a[i] + 1 ~ n 这一段产生贡献,也就是对这一段区间 +1,但问题是这一段有的点还不存在,那么是没有贡献的,所以我们在线段树上维护一个“节点打开数量”,初始所有节点都是“关闭”的,每次打开一个新的点,然后因为维护了这个数量,所以区间 +1 对区间 sum 只会生效这个数量那么多,然后就做完了。
三维偏序https://www.cnblogs.com/smartljy/p/18157936
回溯加去重
相关推荐
08-16 20:54
中山大学 算法工程师 

点赞 评论 收藏
分享