官方题解|元素距离积(困难)
2025-03-02 22:06:35
发布于:浙江
56阅读
0回复
0点赞
题目解析
我们先处理题目式子中的绝对值。
由于 ,所以原式可化为:
注意到,本题 的范围较小,我们可以围绕此,对上式进行变换,从而高速计算。
对于上式,我们考虑枚举 ,同时
令 代表 之前所有元素中值 出现的次数;
令 代表 之前所有元素中值为 的下标之和;
那么可以将上式转化为:
计算上式的时间复杂度为 ,这样我们便可以高效地计算出答案。
AC 代码
#include <bits/stdc++.h>
using i64 = long long;
constexpr int M = 500;
int main() {
int n; std::cin >> n;
i64 res = 0;
std::vector<i64> cnt(M + 1), sum(M + 1);
for (int i = 1; i <= n; ++i) {
int x; std::cin >> x;
for (int y = 1; y <= M; ++y)
res += (i * cnt[y] - sum[y]) * std::abs(x - y);
cnt[x] += 1;
sum[x] += i;
}
std::cout << res * 2 << "\n";
return 0;
}
这里空空如也
有帮助,赞一个