题解:AT_arc074_b [ABC062D] 3N Numbers
题意
给你一个大小为
思路
由于最后求和的两个数组不能有重合部分,所以我们只需要对所有的
那对于一个
code
#include<bits/stdc++.h>
using namespace std;
long long n,a[300200],f[300200],sum[300200],m=-1e18;
priority_queue<long long>q;
priority_queue<long long>p;
int main(){
scanf("%lld",&n);
for(int i=1;i<=3*n;i++)scanf("%lld",&a[i]);
for(int i=1;i<=n;i++){
q.push(-a[i]);
f[i]=f[i-1]+a[i];
}
for(int i=n+1;i<=2*n;i++){
f[i]=f[i-1];
if(a[i]>-q.top()){
f[i]=f[i-1]+q.top()+a[i];
q.pop();
q.push(-a[i]);
}
}
for(int i=3*n;i>2*n;i--){
sum[2*n+1]+=a[i];
p.push(a[i]);
}
for(int i=2*n;i>=n;i--){
if(a[i]<p.top()){
sum[i]=sum[i+1]-p.top()+a[i];
p.pop();
p.push(a[i]);
}
else sum[i]=sum[i+1];
m=max(m,f[i]-sum[i+1]);
}
cout<<m;
return 0;
}