Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- //{
- //#pragma gcc optimize("Ofast,unroll-loops")
- //#pragma gcc target("sse,sse2,sse3,ssse3,sse4,avx,avx2,fma,abm,mmx,popcnt,tune=native")
- //#define int long long
- //#define double long double
- #define MP make_pair
- #define F first
- #define S second
- #define MOD 1000000007
- //}
- int N, M;
- bool cmp(pair<pair<int, int>, int> a, pair<pair<int, int>, int> b)
- {
- pair<int, int> A = a.F, B = b.F;
- int Ad = -1, Bd = -1;
- if (A.F == 1)
- Ad = 0;
- else if (A.S == M)
- Ad = 1;
- else if (A.F == N)
- Ad = 2;
- else
- Ad = 3;
- if (B.F == 1)
- Bd = 0;
- else if (B.S == M)
- Bd = 1;
- else if (B.F == N)
- Bd = 2;
- else
- Bd = 3;
- if (Ad != Bd)
- return Ad < Bd;
- else if (Ad == 0)
- return A.S < B.S;
- else if (Ad == 1)
- return A.F < B.F;
- else if (Ad == 2)
- return A.S > B.S;
- else
- return A.F > B.F;
- }
- signed main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- int T;
- cin >> T;
- while (T--)
- {
- pair<int, int> A[2], B[2];
- cin >> N >> M;
- cin >> A[0].F >> A[0].S >> A[1].F >> A[1].S;
- cin >> B[0].F >> B[0].S >> B[1].F >> B[1].S;
- if (max(A[0].F, A[1].F) < min(B[0].F, B[1].F) || max(B[0].F, B[1].F) < min(A[0].F, A[1].F))
- cout << "Yes\n";
- else if (max(A[0].S, A[1].S) < min(B[0].S, B[1].S) || max(B[0].S, B[1].S) < min(A[0].S, A[1].S))
- cout << "Yes\n";
- else if (N == 1 || M == 1)
- cout << "No\n";
- else
- {
- int Ae = 0, Be = 0;
- if (A[0].F == 1 || A[0].F == N || A[0].S == 1 || A[0].S == M)
- Ae++;
- if (A[1].F == 1 || A[1].F == N || A[1].S == 1 || A[1].S == M)
- Ae++;
- if (B[0].F == 1 || B[0].F == N || B[0].S == 1 || B[0].S == M)
- Be++;
- if (B[1].F == 1 || B[1].F == N || B[1].S == 1 || B[1].S == M)
- Be++;
- if (A[0].F > A[1].F)
- swap(A[0], A[1]);
- if (B[0].F > B[1].F)
- swap(B[0], B[1]);
- if (Ae + Be < 3)
- if (A[1] == MP(A[0].F + 1, A[0].S + 1) && B[0] == MP(A[0].F, A[0].S + 1) && B[1] == MP(A[0].F + 1, A[0].S))
- cout << "No\n";
- else if (A[1] == MP(A[0].F + 1, A[0].S - 1) && B[0] == MP(A[0].F, A[0].S - 1) && B[1] == MP(A[0].F + 1, A[0].S))
- cout << "No\n";
- else
- cout << "Yes\n";
- else if (Ae + Be == 3)
- {
- if (Be == 2)
- swap(A[0], B[0]), swap(A[1], B[1]);
- if (A[0] == MP(1, 2) && A[1] == MP(2, 1) && (B[0] == MP(1, 1) || B[1] == MP(1, 1)))
- cout << "No\n";
- else if (A[0] == MP(N - 1, 1) && A[1] == MP(N, 2) && (B[0] == MP(N, 1) || B[1] == MP(N, 1)))
- cout << "No\n";
- else if (A[0] == MP(1, M - 1) && A[1] == MP(2, M) && (B[0] == MP(1, M) || B[1] == MP(1, M)))
- cout << "No\n";
- else if (A[0] == MP(N - 1, M) && A[1] == MP(N, M - 1) && (B[0] == MP(N, M) || B[1] == MP(N, M)))
- cout << "No\n";
- else
- cout << "Yes\n";
- }
- else
- {
- vector<pair<pair<int, int>, int>> v;
- v.push_back(MP(A[0], 0)), v.push_back(MP(A[1], 0));
- v.push_back(MP(B[0], 1)), v.push_back(MP(B[1], 1));
- sort(v.begin(), v.end(), cmp);
- if (v[0].S == 0 && v[1].S == 1 && v[2].S == 0 && v[3].S == 1)
- cout << "No\n";
- else if (v[0].S == 1 && v[1].S == 0 && v[2].S == 1 && v[3].S == 0)
- cout << "No\n";
- else
- cout << "Yes\n";
- }
- }
- }
- return 0;
- }
- // ***** ***** * * * ***** * * ***** *****
- // * * * * * * * ** * * * *
- // * * * ***** * * * * * * *****
- // * * * * * * * * ** * *
- // **** ***** * ***** ***** * * * *
- // * * *** * * **
- // * * * * * * **
- // * * * ***** ***** **
- // * * * * * * *
- // * * * * * * **
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement