思路:
贪心加模拟
code:
#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define ull unsigned long long
#define ld long double
#define all(x) x.begin(), x.end()
#define eps 1e-6
using namespace std;
const int maxn = 2e5 + 9;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
ll n, m;
ll a[maxn], ans[maxn];
void work()
{
cin >> n;
unordered_map<int,int> ma;
for(int i = 1, x; i <= n; ++i) cin >> x, ans[i] = 0, ma[x]++;
ans[0] = 0;
priority_queue <pair<int,int> > q;
for(int i = 0; i <= n; ++i)
{
if(i > 0 && !ma[i-1])
{
if(q.empty())
{
for(int j = i; j <= n; ++j) ans[j] = -1;
break;
}
else
{
pair<int,int> now = q.top();q.pop();
ans[i] = ans[i-1] + i - 1 - now.first + ma[i];
if(--now.second >= 1) q.push({now.first, now.second});
if(ma[i] > 1) q.push({i, ma[i] - 1});
continue;
}
}
ans[i] = ma[i];
if(i > 0) ans[i] += ans[i-1] - ma[i-1];
if(ma[i] > 1) q.push({i, ma[i] - 1});
}
for(int i = 0; i <= n; ++i) cout << ans[i] << " ";cout << endl;
}
/*
test_2 case_70:
1
8
0 2 4 0 8 4 2 5
*/
int main()
{
ios::sync_with_stdio(0);
int TT;cin>>TT;while(TT--)
work();
return 0;
}