成功场切。
注意到原式中的绝对值,那么我们可以分类讨论。
1. 当 时,值为
。
2. 当 时,值为
。
明显是单调的,那么我们就可以用二分轻松切掉此题啦。
#include <bits/stdc++.h>
#define mod 998244353
using namespace std;
long long n, m, a[300005], b[300005], c[300005], da = 0;
int main(){
scanf("%lld %lld", &n, &m);
for(int i = 1;i<=n;i++){
scanf("%lld", &a[i]);
}
for(int i = 1;i<=m;i++){
scanf("%lld", &b[i]);
}
sort(b + 1, b + m + 1);
for(int i = 1;i<=m;i++){
c[i] = c[i - 1] + b[i];
}
for(int i = 1;i<=n;i++){
int p = lower_bound(b + 1, b + m + 1, a[i]) - b - 1;
da = (da + (p * a[i] - c[p]) + ((c[m] - c[p]) - (m - p) * a[i])) % mod;
}
printf("%lld", da);
return 0;
}
注意开 long long
7963

被折叠的 条评论
为什么被折叠?



