AtCoder Beginner Contest 351 F题 Double Sum

news/2024/9/22 18:37:40/

F题:Double Sum

标签:扫描线、树状数组、线段树
题意:给定序列 A A A,计算 ∑ i = 1 N ∑ j = i + 1 N max ⁡ ( A j − A i , 0 ) \displaystyle \sum_{i=1}^N \sum_{j=i+1}^N \max(A_j - A_i, 0) i=1Nj=i+1Nmax(AjAi,0)
题解:观察公式,我们按照顺序遍历序列 A A A中的数,固定 A j A_j Aj,就变成了求当前数字和前面所有比自己小的数字之差的和。即公式: ∑ i = 1 j − 1 A j − A i \displaystyle \sum_{i=1}^{j-1} A_j - A_i i=1j1AjAi在满足条件 A j > A i A_j\gt A_i Aj>Ai的情况下。
我们将这个式子展开: A j ∑ i = 1 j − 1 − ∑ i = 1 j − 1 A i A_j\displaystyle \sum_{i=1}^{j-1} - \displaystyle \sum_{i=1}^{j-1}A_i Aji=1j1i=1j1Ai在满足条件 A j > A i A_j\gt A_i Aj>Ai的情况下。
通俗点讲,假设对于 A j A_j Aj来说,在它前面有 m m m个比它小的数 A i A_i Ai,那么值就是 m m m A j A_j Aj之和减去所有在第 j j j个数之前比它小的 A i A_i Ai之和。这个东西可以通过树状数组或者线段树进行维护。这题数据量比较大,需要离散化处理下。
代码

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const ll N = 4e5 + 10;
ll n, b[N], num[N], sum[N], ans = 0;
struct node {ll a, id;
}p[N];bool cmp1(node x, node y) {if (x.a == y.a) return x.id < y.id;return x.a < y.a;
}bool cmp2(node x, node y) {return x.id < y.id;
}ll lowbit(ll x) {return x & (-x);
}void update(ll *tree, ll x, ll k) {for (ll i = x; i <= n; i += lowbit(i)) tree[i] += k;
}ll query(ll *tree, ll x) {ll res = 0;for (ll i = x; i > 0; i -= lowbit(i)) res += tree[i];return res;
}int main() {cin >> n;for (int i = 1; i <= n; i++) {cin >> p[i].a;p[i].id = i;}sort(p + 1, p + 1 + n, cmp1);for (int i = 1; i <= n; i++) b[p[i].id] = i;sort(p + 1, p + 1 + n, cmp2);for (int i = 1; i <= n; i++) {ans += p[i].a * query(num, b[i] - 1);ans -= query(sum, b[i] - 1);update(num, b[i], 1);update(sum, b[i], p[i].a);}cout << ans;return 0;
}

http://www.ppmy.cn/news/1450012.html

相关文章

网络安全思考题

1.windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff0c;密文存在哪个文件下&#xff0c;该文件是否可以打开&#xff0c;并且查看到密文&#xff1f; 存储Windows登录的密码通常是加密存储的&#xff0c;而不是以明文形式存储。Windows使用的是NTLM或者Kerberos等…

Windows环境下基于CMake构建Lua

Windows环境下基于CMake构建Lua 环境&#xff01;&#xff01;&#xff01;注意&#xff1a; lua-5.4.6.tar.gz压缩包中&#xff0c;并未提供luac.c文件&#xff0c;无法构建luac.exe&#xff0c;可以从lua-5.4.5.tar.gz压缩包中拷贝使用 一、搭建基于CMake构建的Lua环境二、构…

go的反射操作reflect实践

通过反射机制&#xff0c;找到相应的Left或者Right广告 type SearchAdsObj struct {Left PositionAdsObj json:"left"Right PositionAdsObj json:"right" }func getFieldByName(obj SearchAdsObj, fieldName string) (interface{}, error) {fmt.Pr…

微服务是什么

微服务&#xff08;Microservices&#xff09; 是一种软件架构风格&#xff0c;它是以一组小的服务来开发一个单一应用的方式&#xff1b;每个服务运行在其独立的进程中&#xff0c;服务与服务间采用轻量级的通信机制&#xff08;通常是基于HTTP的RESTful API&#xff09;。这些…

【C++】set与map的使用

目录 一、set&#xff1a; 1、set介绍&#xff1a; 2、常用构造&#xff1a; 3、常用修改操作&#xff1a; &#xff08;1&#xff09;insert&#xff1a; &#xff08;2&#xff09;find &#xff08;3&#xff09;erase&#xff1a; 4、其他操作&#xff1a; &#…

使用 uni-app 开发 iOS 应用的操作步骤

哈喽呀&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;上一期和大家一起探讨了使用uniapp开发iOS应用的优势及劣势之后有许多小伙伴想要尝试使用uniapp开发iOS应用&#xff0c;但是却不懂如何使用uniapp开发iOS应用&#xff0c;所以这一期淼淼就来给你们分享…

lxml 在 Windows 7上安装无法安装怎么办?

lxml 在 Windows 7上安装无法安装怎么办&#xff1f; 要在Windows 7上安装lxml&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装Python&#xff1a; 如果您的计算机尚未安装Python&#xff0c;请先安装Python。您可以从Python官方网站下载Windows安装程序&#xff0c…

细粒度数据设计对于微调的重要性

原文地址&#xff1a;the-importance-of-granular-data-design-for-fine-tuning 利用数据设计来训练LLM&#xff0c;以充分利用上下文&#xff0c;同时解决“Lost-In-The-Middle”的挑战。 2024 年 5 月 2 日 介绍 对话设计师难道不是杰出的数据设计师吗&#xff1f; 请允许我详…