洛谷 1966 loj 2069 火柴排队 题解

博客介绍了洛谷1966题(LoJ 2069)——火柴排队问题,通过分析题意,提出将数列a和b排序以最小化每个数差的平方和。利用树状数组解决类似逆序对的问题,证明排序后能使aibi的和最大化。最后提供了解决方案的实现细节,包括离散化和交换次数的处理,以及使用树状数组计算逆序对的数量。
摘要由CSDN通过智能技术生成

博客观赏效果更佳

题意简述

给定两个数列 a , b a,b a,b,长度均为 n ( < = 100000 ) n(<=100000) n(<=100000) a , b a,b a,b中的数都互不相同。最小化每个数差的平方的和,形式化地,最小化:

然后输出交换次数对 99999997 99999997 99999997取膜的结果。

思路框架

显然,最优的时候就是 a , b a,b a,b都排好序的时候,那么我们把 a , b a,b a,b离散化,都看成 1 , n 1,n 1,n的排列,然后算 b b b需要多少步到 a a a。是一个类似逆序对的问题,用树状数组维护即珂。

具体思路

先化简一下那个式子。把平方拆开,会发现变成三个部分:

  1. a i 2 a_i^2 ai2的和
  2. b i 2 b_i^2 bi2的和
  3. − 2 a i b i -2a_ib_i 2aibi的和

要让原式最小,那就要让 a i b i a_ib_i aibi的和最大。如何最大呢?那肯定是要排序之后一一对应。

but…Why?

只考虑 n = 2 n=2 n=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值