fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. #define int long long
  5. #define yes cout << "YES\n";
  6. #define no cout << "NO\n";
  7.  
  8.  
  9. void FastIO(){
  10. ios_base::sync_with_stdio(false);
  11. cin.tie(nullptr);
  12. cout.tie(nullptr);
  13. }
  14.  
  15. void solve(){
  16. int n; cin >> n;
  17. vector<vector<int>> a(n);
  18. int maxlen = 0;
  19. for (int i = 0; i < n; ++i){
  20. int k; cin >> k;
  21. a[i].resize(k);
  22. for (int j = 0; j < k; ++j){
  23. cin >> a[i][j];
  24. }
  25. maxlen = max(maxlen, k);
  26. }
  27.  
  28. vector<char> used(n, 0);
  29. vector<int> order;
  30. int covered = 0;
  31.  
  32. auto suffix_less = [&](int i, int j, int c)->bool{
  33. int li = (int)a[i].size();
  34. int lj = (int)a[j].size();
  35. int upto = min(li, lj);
  36. for (int p = c; p < upto; ++p){
  37. if (a[i][p] < a[j][p]) return true;
  38. if (a[i][p] > a[j][p]) return false;
  39. }
  40. if (li != lj) return li < lj;
  41. return i < j;
  42. };
  43.  
  44. while (covered < maxlen){
  45. int best = -1;
  46. for (int i = 0; i < n; ++i){
  47. if (used[i]) continue;
  48. if ((int)a[i].size() <= covered) continue;
  49. if (best == -1) best = i;
  50. else if (suffix_less(i, best, covered)) best = i;
  51. }
  52. if (best == -1) break;
  53. used[best] = 1;
  54. order.push_back(best);
  55. covered = max(covered, (int)a[best].size());
  56. }
  57. for (int i = 0; i < n; ++i) if (!used[i]) order.push_back(i);
  58.  
  59. vector<int> bottom;
  60. bottom.reserve(maxlen);
  61. for (int j = 0; j < maxlen; ++j){
  62. int val = 0;
  63. bool found = false;
  64. for (int idx : order){
  65. if ((int)a[idx].size() > j){
  66. val = a[idx][j];
  67. found = true;
  68. break;
  69. }
  70. }
  71. if (found) bottom.push_back(val);
  72. else bottom.push_back(0);
  73. }
  74.  
  75. for (int i = 0; i < (int)bottom.size(); ++i){
  76. if (i) cout << ' ';
  77. cout << bottom[i];
  78. }
  79. cout << '\n';
  80. }
  81.  
  82. signed main(){
  83. FastIO();
  84.  
  85. int t;
  86. cin >> t;
  87.  
  88. while (t--){
  89. solve();
  90. }
  91. return 0;
  92. }
  93.  
Success #stdin #stdout 0.01s 5324KB
stdin
4
1
3 5 2 7
2
2 2 9
3 3 1 4
3
1 5
2 5 1
2 5 2
3
3 4 4 9
7 7 6 5 4 3 2 1
4 2 4 5 1
stdout
5 2 7
2 9 4
5 1
2 4 5 1 3 2 1