考虑一个十分显然的贪心。

每个英雄一定取到前面最大的没有被取的附加牌。

由于答案与顺序无关。

所以前 \(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(); 
}