洛谷 P4559: bzoj 5319: [JSOI2018]军训列队

解析洛谷P4559题,通过主席树优化算法,探讨学生位置调整的最小距离总和问题。文章详细介绍了如何利用主席树处理区间内学生位置变化,实现最优解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目传送门:洛谷 P4559

题意简述:

\(n\) 个学生,编号为 \(i\) 的学生有一个位置 \(a_i\)

\(m\) 个询问,每次询问编号在 \([l,r]\) 区间内的学生跑到区间 \([k,k+r-l]\) 中的位置花费的距离总和的最小值。

每个学生的初始位置互不相同,最终到达的位置也必须互不相同。

题解:

不难证明,学生跑到最终的位置时,他们的相对位置不改变至少是最优解之一,这可以脑补一下。

所以我们只需要求最终相对位置不变时的答案即可。

因为学生两两位置不同,所以最终有一部分学生向右跑,有一部分学生向左跑。

向右跑的学生对答案的贡献是 \(k+rk_i-1-a_i\)\(rk_i\) 表示他的位置在这个编号区间中的学生是第 \(rk_i\) 小的。

向左跑的学生对答案的贡献是 \(a_i-k-rk_i+1\)

显然左边一部分学生向右跑,右边一部分学生向左跑。

考虑使用主席树处理这个问题。

对权值线段树进行可持久化,则编号区间内的学生就是两个线段树相减。

考虑递归进一个区间 \([l,r]\),有 \(4\) 种情况。

  1. 这个区间中没有学生。直接返回 \(0\)

  2. 这个区间中的学生全部往右跑。返回 \((\sum k+rk_i-1)-(\sum a_i)\),左边是等差数列求和的形式,右边可以直接记。

  3. 这个区间中的学生全部往左跑。返回 \((\sum a_i)-(\sum k+rk_i-1)\)

  4. 不能确定这个区间中的学生的方向,递归到子树处理。

直接在主席树上实现即可。

时间复杂度 \(O(n\log n+m\log n\times\text{wys})\),因为我不会分析递归的复杂度,可能是 \(O(m\log n)\) 的。

转载于:https://www.cnblogs.com/PinkRabbit/p/10256814.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值