询问一道数列题是否有线性做法
  • 板块学术版
  • 楼主Tsukimaru
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/5/20 17:22
  • 上次更新2023/11/4 23:02:13
查看原帖
询问一道数列题是否有线性做法
45398
Tsukimaru楼主2021/5/20 17:22

题意概述

给定一个序列 {an}\{a_n\}qq 次操作,每次全局加系数非负的二次函数,询问全局最小值。

具体地,第 jj 次操作给定 Aj,Bj,CjA_j, B_j, C_jAj,Bj,Cj0A_j, B_j, C_j \geq 0),令所有 aia_i 变为 ai+Aj×i2+Bj×i+Cja_i + A_j \times i^2 + B_j \times i + C_j

每次操作后输出 min1in{Ai}\min_{1 \leq i \leq n}\{A_i\}

做法

注意到二次函数是不下降的,因此全局最小值下标是不上升的。我们可以通过二分来判断哪些时刻内最小值下标是否改变。

具体地,先求出初始条件下的全局最小值下标 minpos\text{minpos},然后二分计算最大的时间 tt 使得进行完编号为 [1,t][1, t] 的全局加操作后 minpos\text{minpos} 不变。不断重复上述过程即可。

朴素实现为 O((n+q)logq)O((n + q) \log q)

问题

有没有线性(即 O(n+q)O(n + q))的做法?

2021/5/20 17:22
加载中...