Advertisement
Ritam_C

Berland Regional

Apr 29th, 2021
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.14 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. typedef long long ll;
  3. typedef unsigned long long ull;
  4. typedef long double ld;
  5. #define vi vector<int>
  6. #define vll vector<long long>
  7. #define pb push_back
  8. #define p_b pop_back
  9. #define FOR(a, b) for(int i = a; i <= b; i++)
  10. #define tests() int t; cin >> t; while(t--)
  11. #define input(a, n) for(int i = 0; i < n; i++){int x; cin >> x; a.pb(x);}
  12. #define MOD (ull)1000000007
  13. using namespace std;
  14.  
  15. bool comp(pair<int, vector<ll>> a, pair<int, vector<ll>> b){
  16.     return a.second.size() < b.second.size();
  17. }
  18.  
  19. int main(){
  20.     ios_base::sync_with_stdio(false);
  21.     cin.tie(NULL);
  22.     tests(){
  23.         int n;
  24.         cin >> n;
  25.         vector<pair<int, ll>> v;
  26.         FOR(0, n-1){
  27.             int u;
  28.             cin >> u;
  29.             v.pb({u, 0});
  30.         }
  31.         FOR(0, n-1){
  32.             ll s;
  33.             cin >> s;
  34.             v[i].second = s;
  35.         }
  36.         unordered_map<int, vector<ll>> m;
  37.         FOR(0, n-1){
  38.             m[v[i].first].pb(v[i].second);
  39.         }
  40.         vector<pair<int, vector<ll>>> final(m.begin(), m.end());
  41.         sort(final.begin(), final.end(), comp);
  42.         int ms = 0;
  43.         for(auto i = final.begin(); i != final.end(); i++){
  44.             sort(i->second.begin(), i->second.end());
  45.             for(int j = 1; j < i->second.size(); j++){
  46.                 i->second[j] += i->second[j-1];
  47.             }
  48.             if(ms < i->second.size()){
  49.                 ms = i->second.size();
  50.             }
  51.         }
  52.         vll ans;
  53.         FOR(0, n-1){
  54.             ans.pb(0);
  55.         }
  56.         for(int i = ms; i >= 1; i--){
  57.             ll sum = 0;
  58.             for(int j = final.size()-1; j >= 0; j--){
  59.                 if(final[j].second.size() < i){
  60.                     break;
  61.                 } else{
  62.                     vll p = final[j].second;
  63.                     sum += p[p.size()-1];
  64.                     if(p.size()%i != 0){
  65.                         sum -= p[p.size()%i-1];
  66.                     }
  67.                 }
  68.             }
  69.             ans[i-1] = sum;
  70.         }
  71.         FOR(0, n-1){
  72.             cout << ans[i] << " ";
  73.         }
  74.         cout << "\n";
  75.     }
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement