#include <bits/stdc++.h>
using namespace std;
long long findMaximumProfit(vector<int>& category, vector<int>& price) {
int n = category.size();
unordered_map<int,vector<int>>items;
for (int i = 0 ; i < n; i++){
items[category[i]].push_back(price[i]);
}
vector<int>lowest_item;
vector<int>rest_items;
// for each cat lets take the min value then re assign the rest
for (auto &it :items){
auto &vp = it.second;
sort(vp.begin(),vp.end()); // sort the prices
lowest_item.push_back(vp[0]);
// skip the first index
for (int i = 1 ; i<vp.size() ;i++){
rest_items.push_back(vp[i]);
}
}
sort(lowest_item.begin(),lowest_item.end());
sort(rest_items.rbegin(),rest_items.rend());
long long total = 0;
int unique= 0;
for (int i = 0 ; i < lowest_item.size();i++){
unique++;
total+=(unique * lowest_item[i]);
}
// after opening all the cat we can take the rest
for (int i = 0 ; i < rest_items.size();i++){
total+=(unique * rest_items[i]);
}
return total;
}
int main() {
vector<int> category = {3, 1, 2, 3};
vector<int> price = {2, 1, 4, 4};
cout << findMaximumProfit(category, price) << endl;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpsb25nIGxvbmcgZmluZE1heGltdW1Qcm9maXQodmVjdG9yPGludD4mIGNhdGVnb3J5LCB2ZWN0b3I8aW50PiYgcHJpY2UpIHsKICAgIGludCBuID0gY2F0ZWdvcnkuc2l6ZSgpOwoJdW5vcmRlcmVkX21hcDxpbnQsdmVjdG9yPGludD4+aXRlbXM7Cglmb3IgKGludCBpID0gMCA7IGkgPCBuOyBpKyspewoJCWl0ZW1zW2NhdGVnb3J5W2ldXS5wdXNoX2JhY2socHJpY2VbaV0pOwoJfQoJdmVjdG9yPGludD5sb3dlc3RfaXRlbTsKCXZlY3RvcjxpbnQ+cmVzdF9pdGVtczsKCS8vIGZvciBlYWNoIGNhdCBsZXRzIHRha2UgdGhlIG1pbiB2YWx1ZSB0aGVuIHJlIGFzc2lnbiB0aGUgcmVzdAoJCglmb3IgKGF1dG8gJml0IDppdGVtcyl7CgkJYXV0byAmdnAgPSBpdC5zZWNvbmQ7CgkJc29ydCh2cC5iZWdpbigpLHZwLmVuZCgpKTsgLy8gc29ydCB0aGUgcHJpY2VzIAoJCWxvd2VzdF9pdGVtLnB1c2hfYmFjayh2cFswXSk7CgkJLy8gc2tpcCB0aGUgZmlyc3QgaW5kZXgKCQlmb3IgKGludCBpID0gMSA7IGk8dnAuc2l6ZSgpIDtpKyspewoJCQlyZXN0X2l0ZW1zLnB1c2hfYmFjayh2cFtpXSk7CgkJfQoJCQoJfQoJc29ydChsb3dlc3RfaXRlbS5iZWdpbigpLGxvd2VzdF9pdGVtLmVuZCgpKTsKCXNvcnQocmVzdF9pdGVtcy5yYmVnaW4oKSxyZXN0X2l0ZW1zLnJlbmQoKSk7CgkKCWxvbmcgbG9uZyB0b3RhbCA9IDA7CglpbnQgdW5pcXVlPSAwOyAKCQoJZm9yIChpbnQgaSA9IDAgOyBpIDwgbG93ZXN0X2l0ZW0uc2l6ZSgpO2krKyl7CgkJdW5pcXVlKys7CgkJdG90YWwrPSh1bmlxdWUgKiBsb3dlc3RfaXRlbVtpXSk7Cgl9CgkvLyBhZnRlciBvcGVuaW5nIGFsbCB0aGUgY2F0IHdlIGNhbiB0YWtlIHRoZSByZXN0Cglmb3IgKGludCBpID0gMCA7IGkgPCByZXN0X2l0ZW1zLnNpemUoKTtpKyspewoJCXRvdGFsKz0odW5pcXVlICogcmVzdF9pdGVtc1tpXSk7Cgl9CglyZXR1cm4gdG90YWw7CiAgIAp9CgppbnQgbWFpbigpIHsKICAgIHZlY3RvcjxpbnQ+IGNhdGVnb3J5ID0gezMsIDEsIDIsIDN9OwogICAgdmVjdG9yPGludD4gcHJpY2UgICAgPSB7MiwgMSwgNCwgNH07CgogICAgY291dCA8PCBmaW5kTWF4aW11bVByb2ZpdChjYXRlZ29yeSwgcHJpY2UpIDw8IGVuZGw7IAp9Cg==