模拟测试56

T1:

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

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

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

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

T2:

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

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

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

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

  修改时直接子数加即可。

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

T3:

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

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

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

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

猜你喜欢

转载自www.cnblogs.com/hz-Rockstar/p/11619694.html
56
#56