3 条题解
-
3
#include <bits/stdc++.h> #define int long long const int N = 2e5 + 10; const int INF = 0x3f3f3f3f; using namespace std; int t , lenc , s [N] , ans [N] , f [N]; struct node { int id , p; }a [N]; bool cmp (node a1 , node a2) { if (a1.id == a2.id) return a1.p > a2.p; return a1.id < a2.id; } signed main() { cin >> t; for (int i = 1; i <= t; i++) { scanf ("%lld" , &a [i].id); if (!s [a [i].id]) lenc++; s [a [i].id]++; } for (int i = 1; i <= t; i++) scanf ("%lld" , &a [i].p); sort (a + 1 , a + t + 1 , cmp); // for (int i = 1; i <= t; i++) cout << a [i].id << " "; // cout << "\n"; // for (int i = 1; i <= t; i++) cout << a [i].p << " "; // cout << lenc << "\n"; int len = 1; for (int i = 1; i <= lenc; i++) { f [len] = a [len].p; for (int j = len + 1; j <= len + s [a [len].id]; j++) f [j] = f [j - 1] + a [j].p; len += s [a [len].id]; } len = 1; while ( lenc-- ) { for (int j = 1; j <= s [a [len].id]; j++) //1-n { int t = s [a [len].id] % j; ans [j] += f [len + s [a [len].id] - t - 1]; } len += s [a [len].id]; } for (int i = 1; i <= t; i++) cout << ans [i] << " "; return 0; }
信息
- ID
- 2342
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 150
- 已通过
- 23
- 上传者