#include #include #include #include #include using namespace std; const int N = 1e6 +10; const int mod = 998244353; typedef long long ll; void solve() { int n; cin >> n; vector a(n), cnt(n + 1); for (int i = 0; i < n; i ++) { int t; cin >> t; a.push_back(t); cnt[t] ++; } sort(a.begin(), a.end()); stack st; vector ans(n + 1, -1); ll sum = 0; for (int i = 0; i <= n; i ++) { if (i > 0 && cnt[i - 1] == 0) { if (st.empty()) { break; } int j = st.top(); st.pop(); sum += i - 1 - j; } ans[i] = sum + cnt[i]; while(i > 0 && cnt[i - 1] > 1) { cnt[i - 1] --; st.push(i - 1); } } for(auto t :ans) cout << t << " "; puts(""); } int main () { int t; cin >> t; while(t --) solve(); return 0; }
首先对于mex要等于n,首先必须达到n-1,如果不能够达到n-1,那么就break否则,加上达到n-1的次数,然后加上n的个数。 这时已经达到了n-1,所以将所有多余的n-1去掉即可
上一篇 盒马与淄博布局重仓数字农业探索乡村振兴新样本
下一篇 day3 1006 换个格式输出整数
版权所有 (c)2021-2022 MSHXW.COM
ICP备案号:晋ICP备2021003244-6号