Raslboyy

2817

Feb 5th, 2020
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.04 KB | None | 0 0
  1. #include <iostream>
  2. #include <bits/stdc++.h>
  3. #define mp make_pair
  4. #define pb push_back
  5. #define eb emplace_back
  6. #define x first
  7. #define y second
  8. #define sz(x) (int)x.size()
  9. #define all(x) begin(x), end(x)
  10. #define rall(x) rbegin(x), rend(x)
  11. #define FOR(i,a,b) for (int i = (a); i < (b); i++)
  12. #define RFOR(i,b,a) for (int i = (b) - 1; i >= (a); i--)
  13.  
  14. using namespace std;
  15.  
  16. typedef unsigned long long ull;
  17. typedef long long ll;
  18. typedef long double ld;
  19. typedef pair<int, int> pi;
  20. typedef pair<ll, ll> pl;
  21. typedef vector<int> veci;
  22. typedef vector<bool> vecb;
  23. typedef vector<vector<int>> vvi;
  24. typedef vector<vector<bool>> vvb;
  25.  
  26. int main() {
  27.     ios::sync_with_stdio(false);
  28.     cin.tie(nullptr);
  29.     cout.tie(nullptr);
  30.  
  31.     vvi vec(4);
  32.     for (int i = 0; i < 4; i++){
  33.         int n;
  34.         cin >> n;
  35.         vec[i].assign(n, 0);
  36.         for (int j = 0; j < n; j++)
  37.             cin >> vec[i][j];
  38.         sort(all(vec[i]));
  39.     }
  40.     veci r(4);
  41.     multimap<int, int> M;
  42.     M.insert({
  43.         mp(vec[0][0], 0),
  44.         mp(vec[1][0], 1),
  45.         mp(vec[2][0], 2),
  46.         mp(vec[3][0], 3),
  47.               });
  48.  
  49.     int res_min = INT_MAX;
  50.     veci res(4);
  51.  
  52.     while(r[0] + 1 < sz(vec[0]) || r[1] + 1 < sz(vec[1]) || r[2] + 1 < sz(vec[2]) || r[3] + 1 < sz(vec[3])){
  53.         if(M.rbegin()->x - M.begin()->x < res_min){
  54.             res_min = M.rbegin()->x - M.begin()->x;
  55.             for (auto i : M)
  56.                 res[i.y] = i.x;
  57.         }
  58.         for (auto i = M.begin(); i != M.end(); i++)
  59.             if (r[i->y] + 1 < sz(vec[i->y])) {
  60.                 r[i->y]++;
  61.                 auto it = M.equal_range(i->x);
  62.                 pi nw;
  63.                 for (auto j = it.x; j != it.y;j++)
  64.                     if (j->y == i->y){
  65.                         nw = mp(vec[j->y][r[j->y]], j->y);
  66.                         M.erase(j);
  67.                         M.insert(nw);
  68.                         break;
  69.                     }
  70.  
  71.                 break;
  72.             }
  73.     }
  74.  
  75.     for (int i : res)
  76.         cout << i << " ";
  77.  
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment