Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- typedef long long ll;
- typedef unsigned long long ull;
- typedef long double ld;
- #define vi vector<int>
- #define vll vector<long long>
- #define pb push_back
- #define p_b pop_back
- #define FOR(a, b) for(int i = a; i <= b; i++)
- #define tests() int t; cin >> t; while(t--)
- #define input(a, n) for(int i = 0; i < n; i++){int x; cin >> x; a.pb(x);}
- #define MOD (ull)1000000007
- using namespace std;
- bool comp(pair<int, vector<ll>> a, pair<int, vector<ll>> b){
- return a.second.size() < b.second.size();
- }
- int main(){
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- tests(){
- int n;
- cin >> n;
- vector<pair<int, ll>> v;
- FOR(0, n-1){
- int u;
- cin >> u;
- v.pb({u, 0});
- }
- FOR(0, n-1){
- ll s;
- cin >> s;
- v[i].second = s;
- }
- unordered_map<int, vector<ll>> m;
- FOR(0, n-1){
- m[v[i].first].pb(v[i].second);
- }
- vector<pair<int, vector<ll>>> final(m.begin(), m.end());
- sort(final.begin(), final.end(), comp);
- int ms = 0;
- for(auto i = final.begin(); i != final.end(); i++){
- sort(i->second.begin(), i->second.end());
- for(int j = 1; j < i->second.size(); j++){
- i->second[j] += i->second[j-1];
- }
- if(ms < i->second.size()){
- ms = i->second.size();
- }
- }
- vll ans;
- FOR(0, n-1){
- ans.pb(0);
- }
- for(int i = ms; i >= 1; i--){
- ll sum = 0;
- for(int j = final.size()-1; j >= 0; j--){
- if(final[j].second.size() < i){
- break;
- } else{
- vll p = final[j].second;
- sum += p[p.size()-1];
- if(p.size()%i != 0){
- sum -= p[p.size()%i-1];
- }
- }
- }
- ans[i-1] = sum;
- }
- FOR(0, n-1){
- cout << ans[i] << " ";
- }
- cout << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement