Cod sursa(job #2346512)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 17 februarie 2019 19:30:20
Problema Interclasari Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;
const int MAXK = 20;
vector <int> v[MAXK + 1];
vector <int> solve (int st, int dr) {
  if (st == dr) {
    return v[st];
  }
  int mij = (st + dr) / 2;
  vector <int> a = solve (st, mij);
  vector <int> b = solve (mij + 1, dr);
  int ia, ib;
  ia = ib = 0;
  vector <int> c;
  while (ia < a.size () || ib < b.size ())
    if (ia == a.size () || (ib < b.size () && a[ia] > b[ib]))
      c.push_back (b[ib++]);
    else
      c.push_back (a[ia++]);
  return c;
}

int main() {
  int k, x, i, ni;
  freopen ("interclasari.in", "r", stdin);
  freopen ("interclasari.out", "w", stdout);
  scanf ("%d", &k);
  for (i = 1; i <= k; i++) {
    scanf ("%d", &ni);
    while (ni--) {
      scanf ("%d", &x);
      v[i].push_back (x);
    }
  }
  vector <int> sol = solve (1, k);
  printf ("%d\n", sol.size ());
  for (auto x : sol)
    printf ("%d ", x);
  return 0;
}