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
#include "cstdio"
#include "vector"
#include "algorithm"
using namespace std;
long long t,n,w,x1,x2,yy1,y2,x,y,maks,indeks[50005],lol;
pair <long long, pair<long long,long long> > przed[50005],po[50005];
bool ok;
int main()
{
	scanf ("%lld", &t);
	for (int i=0; i<t; i++)
	{
		scanf ("%lld%lld", &n, &w);
		for (int j=0; j<n; j++)
		{
			scanf ("%lld%lld%lld%lld", &x1, &yy1, &x2, &y2);
			przed[j].first=min(x1,x2);
			przed[j].second.first=abs(yy1-y2);
			przed[j].second.second=j;
		}
		for (int j=0; j<n; j++)
		{
			scanf ("%lld%lld%lld%lld", &x1, &yy1, &x2, &y2);
			po[j].first=min(x1,x2);
			po[j].second.first=abs(yy1-y2);
			po[j].second.second=j;
		}
		sort (przed, przed+n);
		sort (po, po+n);
		
		for (int j=0; j<n; j++) indeks[przed[j].second.second]=j;
		ok=true;
		
		for (int j=0; j<n; j++)
		{
			if (przed[j].second.second!=po[j].second.second)
			{
				if (indeks[po[j].second.second]>j) 
				{
					x=j+1,y=indeks[po[j].second.second];
				
					for (int v=x; v<=y; v++)
					{
							if (po[x-1].second.first+po[v].second.first>w)
							{
								ok=false;
								break;
							}		
					}
				}
			}
			if (!ok) break;
		}
		printf ((ok) ? "TAK\n" : "NIE\n");
	}
	
	return 0;
}