class Solution {
public:
typedef long long LL;
int magicTower(vector<int>& nums) {
LL sum = 0;
for (auto c: nums) sum += c;
if (sum < 0) return -1;
int res = 0;
LL hp = 1;
priority_queue<int> h;
for (auto x: nums) {
if (x < 0) h.push(-x);
hp += x;
if (hp < 1) {
hp += h.top();
h.pop();
res ++ ;
}
}
return res;
}
};