给定 nnn 个数的序列 a1,a2,⋯ ,ana_1, a_2, \cdots, a_na1,a2,⋯,an。mmm 次询问,每次询问给定两个数 l,rl, rl,r,需要输出 {∑i=lr−1max{0,ai−ai+1}l≤r∑i=rl−1max{0,ai+1−ai}r<l\begin{cases}\sum \limits_{i=l}^{r-1} \max\{0,a_{i}-a_{i+1}\} && l \leq r \\ \sum \limits_{i=r}^{l-1} \max\{0,a_{i+1}-a_i\} && r < l\end{cases}⎩⎨⎧i=l∑r−1max{0,ai−ai+1}i=r∑l−1max{0,ai+1−ai}l≤rr<l。
先考虑暴力,显然就是区间求和,但是由于 2≤n≤1052 \leq n \leq 10^52≤n≤105,1≤m≤1051 \leq m \leq 10^51≤m≤105。这个复杂度是 O(nm)O(nm)O(nm) 的,显然超时。但是赛时好像有人暴力卡常过了 pretest,不过被 hack 了。
显然区间求和是可以优化的,因为这题没有修改操作,可以预处理出两个前缀和数组,O(n)O(n)O(n) 预处理,O(1)O(1)O(1) 单次查询。
当然区间和也可以用线段树或树状数组等数据结构,复杂度 O(mlogn)O(m \log n)O(mlogn)。我赛时就用的是树状数组。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现