这道题就简单多了!
2025-07-27 11:14:30
发布于:北京
1阅读
0回复
0点赞
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
const int MAXN = 1e5+5;
struct Node {
int s, a;
} arr[MAXN];
int preSum[MAXN], preMax[MAXN], sufMax[MAXN];
bool cmpA(Node x, Node y) { return x.a > y.a; }
int main() {
int n; cin >> n;
for(int i=1; i<=n; i++) cin >> arr[i].s;
for(int i=1; i<=n; i++) cin >> arr[i].a;
sort(arr+1, arr+n+1, cmpA);
// 预处理前缀和与前缀最大距离
for(int i=1; i<=n; i++) {
preSum[i] = preSum[i-1] + arr[i].a;
preMax[i] = max(preMax[i-1], arr[i].s);
}
// 预处理后缀最大(2s+a)
for(int i=n; i>=1; i--)
sufMax[i] = max(sufMax[i+1], 2*arr[i].s + arr[i].a);
for(int x=1; x<=n; x++) {
int ans1 = preSum[x] + 2*preMax[x];
int ans2 = preSum[x-1] + sufMax[x];
cout << max(ans1, ans2) << endl;
}
return 0;
}
这里空空如也
有帮助,赞一个