// PA2014, runda 3, Parking // Andrzej Pezarski #include <cstdlib> #include <cstdio> #include <vector> #include <algorithm> using namespace std; int T[1024*128]; int main() { int Z; scanf("%d", &Z); while (Z--) { int N, W, L=1; scanf("%d%d", &N, &W); while (L<=N) L*=2; vector<pair<pair<int, int>, int > > A(N), B(N); for (int i=0; i<N; i++) { int x1, x2, y1, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); A[i]=make_pair(make_pair(min(x1, x2), abs(y1-y2)), i); } sort(A.begin(), A.end()); for (int i=0; i<N; i++) { int x1, x2, y1, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); B[i]=make_pair(make_pair(min(x1, x2), abs(y1-y2)), i); } sort(B.begin(), B.end()); vector<int> sigma(N); for (int i=0; i<N; i++) { sigma[A[i].second]=i; T[L+i]=A[i].first.second; } for (int i=N; i<L; i++) { T[L+i]=0; } for (int i=L-1; i>0; i--) { T[i]=max(T[2*i], T[2*i+1]); } bool zle=false; for (auto b:B) { int maxW=0; int v=L+sigma[b.second]; T[v]=0; while (v>1) { if (v%2==1) maxW=max(maxW, T[v-1]); v/=2; T[v]=max(T[2*v], T[2*v+1]); } if (zle=(W-maxW<b.first.second)) break; } printf("%s\n", zle?"NIE":"TAK"); } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | // PA2014, runda 3, Parking // Andrzej Pezarski #include <cstdlib> #include <cstdio> #include <vector> #include <algorithm> using namespace std; int T[1024*128]; int main() { int Z; scanf("%d", &Z); while (Z--) { int N, W, L=1; scanf("%d%d", &N, &W); while (L<=N) L*=2; vector<pair<pair<int, int>, int > > A(N), B(N); for (int i=0; i<N; i++) { int x1, x2, y1, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); A[i]=make_pair(make_pair(min(x1, x2), abs(y1-y2)), i); } sort(A.begin(), A.end()); for (int i=0; i<N; i++) { int x1, x2, y1, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); B[i]=make_pair(make_pair(min(x1, x2), abs(y1-y2)), i); } sort(B.begin(), B.end()); vector<int> sigma(N); for (int i=0; i<N; i++) { sigma[A[i].second]=i; T[L+i]=A[i].first.second; } for (int i=N; i<L; i++) { T[L+i]=0; } for (int i=L-1; i>0; i--) { T[i]=max(T[2*i], T[2*i+1]); } bool zle=false; for (auto b:B) { int maxW=0; int v=L+sigma[b.second]; T[v]=0; while (v>1) { if (v%2==1) maxW=max(maxW, T[v-1]); v/=2; T[v]=max(T[2*v], T[2*v+1]); } if (zle=(W-maxW<b.first.second)) break; } printf("%s\n", zle?"NIE":"TAK"); } return 0; } |