Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #include<ext/pb_ds/assoc_container.hpp>
- using namespace __gnu_pbds;
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- #define pb push_back
- #define X first
- #define Y second
- #define sz(v) (int)v.size()
- using ord = tree<int, null_type, greater<int>, rb_tree_tag, tree_order_statistics_node_update>;
- void solve();
- main() {
- ios_base::sync_with_stdio(0), cin.tie(0);
- #ifdef ONPC
- freopen("in.txt", "r", stdin);
- #endif
- int t = 1;
- cin >> t;
- while (t--) solve();
- return 0;
- }
- void solve() {
- ll l1, r1, l2, r2, s1, d1, s2, d2;
- cin >> l1 >> r1 >> l2 >> r2 >> s1 >> d1 >> s2 >> d2;
- ll end1 = s1 + d1;
- pair<ll, pair<ll, ll>> ans = {1e18, {1e18, 1e18}};
- ll can = max((ll)0, min(s1 - l1, end1 - s2));
- ll ss = can;
- ll start1 = s1;
- ll end2 = s2 + d2;
- ll start2 = s2;
- start1 -= can;
- end1 -= can;
- can = max((ll)0, min(r2 - end2, end1 - start2));
- ss += can;
- start2 += can;
- end2 += can;
- if (end1 <= start2) ans = min(ans, {ss, {start1, start2}});
- ss = 0;
- start1 = s1, end1 = s1 + d1, start2 = s2, end2 = s2 + d2;
- can = max((ll)0, min(s2 - l2, end2 - start1));
- ss += can;
- start2 -= can;
- end2 -= can;
- can = max((ll)0, min(r1 - end1, end2 - start1));
- ss += can;
- start1 += can;
- end1 += can;
- if (end2 <= start1) ans = min(ans, {ss, {start1, start2}});
- if (ans.X != 1e18) cout << ans.Y.X << ' ' << ans.Y.Y << '\n';
- else cout << -1 << ' ' << -1 << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement