#include <bits/stdc++.h>
using namespace std;
int main()
{
// index 1 2 3 4 5 6 7 8 9
int b[10] = {0, 5 , 5 , 5 , 3 , 3 , 2 , 2 , 1 , 1};
int n = 9;
/*
Element , frequency
5 3 --> index 3
3 2 --> index 2
2 2 --> index 1
1 2 --> index 0
*/
unordered_map<int,int>k;
for(int i=1; i<=n; i++)
{
k[b[i]] = k[b[i]] + 1;
}
/*
<(5,3)<5 , 3>>g; // g(5,3)
<(3,2)<3 , 2>g; // g(3,2)
<(2,2)<2 , 2>g; // g(2,2)
<(1,2)<1 , 2>g; // g(1,2)
*/
vector<pair<int,int>>g;
for(auto u=k.begin(); u!=k.end(); u++)
{
// Element Frequency
g.push_back({u->first, u->second});
}
int size = g.size(); // map size -> 4
int step = 0;
for(int i=size - 1; i>=1; i--)
{
// iteration 3:
// 4 - 1 = 3
// i = 3
//
// g[i-1].second = g[3-1].second = g[2].second
// g[2].second = 2 (frequency of element 3)
//
// g[i].second = g[3].second
// g[3].second = 3 (frequency of element 5)
//
// g[2].second = g[2].second + g[3].second
// g[2].second = 2 + 3 = 5
//
// step = 0
// step = step + g[3].second
// step = 0 + 3 = 3
//
// We reset the frequency at index 3 to zero because
// its frequency has already been transferred to index 2.
//
// map now becomes {2, 2, 5, 0}
// iteration 2:
// 3 - 1 = 2
// i = 2
//
// g[i-1].second = g[2-1].second = g[1].second
// g[1].second = 2 (frequency of element 2)
//
// g[i].second = g[2].second
// g[2].second = 5 (updated frequency of element 3)
//
// g[1].second = g[1].second + g[2].second
// g[1].second = 2 + 5 = 7
//
// step = 3
// step = step + g[2].second
// step = 3 + 5 = 8
//
// We reset the frequency at index 2 to zero because
// its frequency has already been transferred to index 1.
//
// map now becomes {2, 7, 0, 0}
// iteration 1:
// 2 - 1 = 1
// i = 1
//
// g[i-1].second = g[1-1].second = g[0].second
// g[0].second = 2 (frequency of element 1)
//
// g[i].second = g[1].second
// g[1].second = 7 (updated frequency of element 2)
//
// g[0].second = g[0].second + g[1].second
// g[0].second = 2 + 7 = 9
//
// step = 8
// step = step + g[1].second
// step = 8 + 7 = 15
// We reset the frequency at index 1 to zero because
// its frequency has already been transferred to index 0.
//
// map now becomes {9, 0, 0, 0}
// previous index element freq current index element freq
g[i-1].second = g[i-1].second + g[i].second;
step = step + g[i].second;
g[i].second = 0;
}
cout << step << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIAp7CiAgICAvLyBpbmRleCAgICAxICAgMiAgICAzICAgNCAgIDUgIDYgICA3ICAgOCAgIDkKICAgIGludCBiWzEwXSA9IHswLCA1ICwgNSAsIDUgLCAzICwgMyAsIDIgLCAyICwgMSAsIDF9OwogICAgaW50IG4gPSA5OwoKICAgIC8qCiAgICBFbGVtZW50ICwgZnJlcXVlbmN5IAogICAgICAgICAgIDUgICAgICAgICAgICAgMyAgIC0tPiBpbmRleCAzCiAgICAgICAgICAgMyAgICAgICAgICAgICAyICAgLS0+IGluZGV4IDIKICAgICAgICAgICAyICAgICAgICAgICAgIDIgICAtLT4gaW5kZXggMQogICAgICAgICAgIDEgICAgICAgICAgICAgMiAgIC0tPiBpbmRleCAwCiAgICAqLwoKICAgIHVub3JkZXJlZF9tYXA8aW50LGludD5rOwoKICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspCiAgICB7CiAgICAgICAga1tiW2ldXSA9IGtbYltpXV0gKyAxOwogICAgfQoKICAgIC8qCiAgICAgIDwoNSwzKTw1ICwgMz4+ZzsgLy8gZyg1LDMpCiAgICAgIDwoMywyKTwzICwgMj5nOyAvLyBnKDMsMikKICAgICAgPCgyLDIpPDIgLCAyPmc7IC8vIGcoMiwyKQogICAgICA8KDEsMik8MSAsIDI+ZzsgLy8gZygxLDIpCiAgICAqLwoKICAgIHZlY3RvcjxwYWlyPGludCxpbnQ+Pmc7CgogICAgZm9yKGF1dG8gdT1rLmJlZ2luKCk7IHUhPWsuZW5kKCk7IHUrKykKICAgIHsKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgIEZyZXF1ZW5jeQogICAgICAgIGcucHVzaF9iYWNrKHt1LT5maXJzdCwgdS0+c2Vjb25kfSk7CiAgICB9CgogICAgaW50IHNpemUgPSBnLnNpemUoKTsgLy8gbWFwIHNpemUgLT4gNAogICAgaW50IHN0ZXAgPSAwOwoKICAgIGZvcihpbnQgaT1zaXplIC0gMTsgaT49MTsgaS0tKQogICAgewogICAgICAgIC8vIGl0ZXJhdGlvbiAzOgogICAgICAgIC8vIDQgLSAxID0gMwogICAgICAgIC8vIGkgPSAzCiAgICAgICAgLy8KICAgICAgICAvLyBnW2ktMV0uc2Vjb25kID0gZ1szLTFdLnNlY29uZCA9IGdbMl0uc2Vjb25kCiAgICAgICAgLy8gZ1syXS5zZWNvbmQgPSAyIChmcmVxdWVuY3kgb2YgZWxlbWVudCAzKQogICAgICAgIC8vCiAgICAgICAgLy8gZ1tpXS5zZWNvbmQgPSBnWzNdLnNlY29uZAogICAgICAgIC8vIGdbM10uc2Vjb25kID0gMyAoZnJlcXVlbmN5IG9mIGVsZW1lbnQgNSkKICAgICAgICAvLwogICAgICAgIC8vIGdbMl0uc2Vjb25kID0gZ1syXS5zZWNvbmQgKyBnWzNdLnNlY29uZAogICAgICAgIC8vIGdbMl0uc2Vjb25kID0gMiArIDMgPSA1CiAgICAgICAgLy8KICAgICAgICAvLyBzdGVwID0gMAogICAgICAgIC8vIHN0ZXAgPSBzdGVwICsgZ1szXS5zZWNvbmQKICAgICAgICAvLyBzdGVwID0gMCArIDMgPSAzCiAgICAgICAgLy8KICAgICAgICAvLyBXZSByZXNldCB0aGUgZnJlcXVlbmN5IGF0IGluZGV4IDMgdG8gemVybyBiZWNhdXNlCiAgICAgICAgLy8gaXRzIGZyZXF1ZW5jeSBoYXMgYWxyZWFkeSBiZWVuIHRyYW5zZmVycmVkIHRvIGluZGV4IDIuCiAgICAgICAgLy8KICAgICAgICAvLyBtYXAgbm93IGJlY29tZXMgezIsIDIsIDUsIDB9CgoKICAgICAgICAvLyBpdGVyYXRpb24gMjoKICAgICAgICAvLyAzIC0gMSA9IDIKICAgICAgICAvLyBpID0gMgogICAgICAgIC8vCiAgICAgICAgLy8gZ1tpLTFdLnNlY29uZCA9IGdbMi0xXS5zZWNvbmQgPSBnWzFdLnNlY29uZAogICAgICAgIC8vIGdbMV0uc2Vjb25kID0gMiAoZnJlcXVlbmN5IG9mIGVsZW1lbnQgMikKICAgICAgICAvLwogICAgICAgIC8vIGdbaV0uc2Vjb25kID0gZ1syXS5zZWNvbmQKICAgICAgICAvLyBnWzJdLnNlY29uZCA9IDUgKHVwZGF0ZWQgZnJlcXVlbmN5IG9mIGVsZW1lbnQgMykKICAgICAgICAvLwogICAgICAgIC8vIGdbMV0uc2Vjb25kID0gZ1sxXS5zZWNvbmQgKyBnWzJdLnNlY29uZAogICAgICAgIC8vIGdbMV0uc2Vjb25kID0gMiArIDUgPSA3CiAgICAgICAgLy8KICAgICAgICAvLyBzdGVwID0gMwogICAgICAgIC8vIHN0ZXAgPSBzdGVwICsgZ1syXS5zZWNvbmQKICAgICAgICAvLyBzdGVwID0gMyArIDUgPSA4CiAgICAgICAgLy8KICAgICAgICAvLyBXZSByZXNldCB0aGUgZnJlcXVlbmN5IGF0IGluZGV4IDIgdG8gemVybyBiZWNhdXNlCiAgICAgICAgLy8gaXRzIGZyZXF1ZW5jeSBoYXMgYWxyZWFkeSBiZWVuIHRyYW5zZmVycmVkIHRvIGluZGV4IDEuCiAgICAgICAgLy8KICAgICAgICAvLyBtYXAgbm93IGJlY29tZXMgezIsIDcsIDAsIDB9CgoKICAgICAgICAvLyBpdGVyYXRpb24gMToKICAgICAgICAvLyAyIC0gMSA9IDEKICAgICAgICAvLyBpID0gMQogICAgICAgIC8vCiAgICAgICAgLy8gZ1tpLTFdLnNlY29uZCA9IGdbMS0xXS5zZWNvbmQgPSBnWzBdLnNlY29uZAogICAgICAgIC8vIGdbMF0uc2Vjb25kID0gMiAoZnJlcXVlbmN5IG9mIGVsZW1lbnQgMSkKICAgICAgICAvLwogICAgICAgIC8vIGdbaV0uc2Vjb25kID0gZ1sxXS5zZWNvbmQKICAgICAgICAvLyBnWzFdLnNlY29uZCA9IDcgKHVwZGF0ZWQgZnJlcXVlbmN5IG9mIGVsZW1lbnQgMikKICAgICAgICAvLwogICAgICAgIC8vIGdbMF0uc2Vjb25kID0gZ1swXS5zZWNvbmQgKyBnWzFdLnNlY29uZAogICAgICAgIC8vIGdbMF0uc2Vjb25kID0gMiArIDcgPSA5CiAgICAgICAgLy8KICAgICAgICAvLyBzdGVwID0gOAogICAgICAgIC8vIHN0ZXAgPSBzdGVwICsgZ1sxXS5zZWNvbmQKICAgICAgICAvLyBzdGVwID0gOCArIDcgPSAxNQogICAgICAgIC8vIFdlIHJlc2V0IHRoZSBmcmVxdWVuY3kgYXQgaW5kZXggMSB0byB6ZXJvIGJlY2F1c2UKICAgICAgICAvLyBpdHMgZnJlcXVlbmN5IGhhcyBhbHJlYWR5IGJlZW4gdHJhbnNmZXJyZWQgdG8gaW5kZXggMC4KICAgICAgICAvLwogICAgICAgIC8vIG1hcCBub3cgYmVjb21lcyB7OSwgMCwgMCwgMH0KCgogICAgICAgIC8vICAgICAgIHByZXZpb3VzIGluZGV4IGVsZW1lbnQgZnJlcSAgIGN1cnJlbnQgaW5kZXggZWxlbWVudCBmcmVxCiAgICAgICAgZ1tpLTFdLnNlY29uZCA9IGdbaS0xXS5zZWNvbmQgKyBnW2ldLnNlY29uZDsKCiAgICAgICAgc3RlcCA9IHN0ZXAgKyBnW2ldLnNlY29uZDsKCiAgICAgICAgZ1tpXS5zZWNvbmQgPSAwOwogICAgfQoKICAgIGNvdXQgPDwgc3RlcCA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9