Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bits/stdc++.h>
- #define mp make_pair
- #define pb push_back
- #define eb emplace_back
- #define x first
- #define y second
- #define sz(x) (int)x.size()
- #define all(x) begin(x), end(x)
- #define rall(x) rbegin(x), rend(x)
- #define FOR(i,a,b) for (int i = (a); i < (b); i++)
- #define RFOR(i,b,a) for (int i = (b) - 1; i >= (a); i--)
- using namespace std;
- typedef unsigned long long ull;
- typedef long long ll;
- typedef long double ld;
- typedef pair<int, int> pi;
- typedef pair<ll, ll> pl;
- typedef vector<int> veci;
- typedef vector<bool> vecb;
- typedef vector<vector<int>> vvi;
- typedef vector<vector<bool>> vvb;
- int main() {
- ios::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- vvi vec(4);
- for (int i = 0; i < 4; i++){
- int n;
- cin >> n;
- vec[i].assign(n, 0);
- for (int j = 0; j < n; j++)
- cin >> vec[i][j];
- sort(all(vec[i]));
- }
- veci r(4);
- multimap<int, int> M;
- M.insert({
- mp(vec[0][0], 0),
- mp(vec[1][0], 1),
- mp(vec[2][0], 2),
- mp(vec[3][0], 3),
- });
- int res_min = INT_MAX;
- veci res(4);
- 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])){
- if(M.rbegin()->x - M.begin()->x < res_min){
- res_min = M.rbegin()->x - M.begin()->x;
- for (auto i : M)
- res[i.y] = i.x;
- }
- for (auto i = M.begin(); i != M.end(); i++)
- if (r[i->y] + 1 < sz(vec[i->y])) {
- r[i->y]++;
- auto it = M.equal_range(i->x);
- pi nw;
- for (auto j = it.x; j != it.y;j++)
- if (j->y == i->y){
- nw = mp(vec[j->y][r[j->y]], j->y);
- M.erase(j);
- M.insert(nw);
- break;
- }
- break;
- }
- }
- for (int i : res)
- cout << i << " ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment