#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[200010], b[200010];
int cnt[1000010];
signed main() {
ios::sync_with_stdio(false);
ios_base::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int n, sum = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
b[i] = a[i];
}
sort(a + 1, a + 1 + n);
int m = unique(a + 1, a + 1 + n) - a - 1;
for (int i = m; i >= 1; i--) {
cnt[a[i]] = sum;
sum += a[i];
}
for (int i = 1; i <= n; i++) {
cout << cnt[b[i]] << ' ';
}
return 0;
}
共 2 条回复
thx
问题出在 unique,这个还去重 导致你后面计算和的时候就会忽略重复元素 比如
你因为 unique 将 2 去重 变成 1 2 3,在计算 比 1 大的时候 你只会算 2+3 实际上是 2 + 2 + 3