2
const int MOD = 1e9 + 7;7
return (n * (n + 1) / 2);10
int maxProfit(vector<int> &inventory, int orders) {11
ll n = inventory.size(), i = 0, ans = 0;12
inventory.push_back(0);13
sort(inventory.rbegin(), inventory.rend());14
while (orders and i < n) {15
if (inventory[i] != inventory[i + 1]) {16
ll width = i + 1, h = inventory[i] - inventory[i + 1];17
ll available = width * h, gain = 0;18
if (available <= orders) {20
// from each of the first i+1 inventories, we gain (inventory[i+1] +21
// 1) + ... + inventory[i] value22
gain = (width * (summation(inventory[i]) - summation(inventory[i + 1]))) % MOD;24
ll q = orders / width, r = orders % width;25
// q balls picked from each of the first i+1 inventories26
gain = (width * (summation(inventory[i]) - summation(inventory[i] - q))) % MOD;27
// 1 ball picked from r inventories providing value (inventory[i]-q)28
gain = (gain + r * (inventory[i] - q)) % MOD;32
ans = (ans + gain) % MOD;