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

模拟测试56

时间:2019-10-03 14:22:07      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:复杂度   算法   时间复杂度   现在   前缀   就是   路径   树状数组   log   

T1:

  对于同一种选取方案,在时间上是单调的。

  如果单调下降,那么该方案的最优点在0,反之可以二分位置。

  现在我们需要求得在某个时间上的前m小值,用nth_element即可。

  时间复杂度$O(nlog\max(ans))$。

T2:

  每条路径的意义就是两端的点权之和。

  我们可以折叠所有点到根节点的路径,用$x_1$表示所有点的权值。

  询问时,直接解出方程,判断是否有解或是否有无限个解。

  根据折叠方程的特点,我们需要按深度分奇偶维护到根的边权和,可以用书状数组。

  修改时直接子数加即可。

  时间复杂度$O(nlogn)$。

T3:

  先枚举右端点,在从右向左枚举左端点,同时用树状数组维护纵坐标的个数和前缀和。

  两端上的点将纵坐标分成了许多区间,暴力枚举上边界所在区间,然后可以在左右端点上lower_bound求出下边界的上界区间。

  然后通过区间内的点数及前缀和计算出贡献即可。

  由于每个点都被计算不超过n次,所以整个算法的复杂度为$O(nmlogm)$。

模拟测试56

标签:复杂度   算法   时间复杂度   现在   前缀   就是   路径   树状数组   log   

原文地址:https://www.cnblogs.com/hz-Rockstar/p/11619694.html

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