考虑一个十分显然的贪心。
每个英雄一定取到前面最大的没有被取的附加牌。
由于答案与顺序无关。
所以前 \(k\) 个英雄一定可以取到前 \(k\) 大的附加牌。
那么考虑用一个堆维护即可。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T;
void work(){
int ans=0;
priority_queue<int> s;
int n;
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(x==0&&s.size()>0){
ans+=s.top();
s.pop();
}
else{
s.push(x);
}
}
cout<<ans<<'\n';
}
signed main(){
cin>>T;
while(T--) work();
}