#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
bool T[100008];
struct tr{
int val,nr;
tr(int val,int nr):val(val),nr(nr){}
};
bool operator<(tr A,tr B){
if(A.val<B.val)return true;
if(A.val==B.val)return A.nr<B.nr;
return false;
}
void f(){
int n;
scanf("%d",&n);
vector<tr> wB,wE,hB,hE;
for(int i=0;i<n;i++){
T[i]=0;
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
wB.push_back(tr(a,i));
wE.push_back(tr(b,i));
hB.push_back(tr(c,i));
hE.push_back(tr(d,i));
}
sort(wB.begin(),wB.end());
sort(wE.begin(),wE.end());
sort(hB.begin(),hB.end());
sort(hE.begin(),hE.end());
// for(int i=0;i<n;i++)printf("%d,%d ",wB[i].val,wB[i].nr);
// printf("\n");
// for(int i=0;i<n;i++)printf("%d,%d ",wE[i].val,wE[i].nr);
// printf("\n");
// for(int i=0;i<n;i++)printf("%d,%d ",hB[i].val,hB[i].nr);
// printf("\n");
// for(int i=0;i<n;i++)printf("%d,%d ",hE[i].val,hE[i].nr);
// printf("\n");
int j=n-1;
while(j>0 && wE[j].val==wE[j-1].val)j--;
int i=0;
while(i<n && j<n){
if(i!=0 && wB[i].val!=wB[i-1].val)break;
if(wB[i].nr==wE[j].nr){
T[wB[i].nr]=true;
j++;i++;
continue;
}
if(wB[i].nr<wE[j].nr){
i++;continue;
}
if(wB[i].nr>wE[j].nr){
j++;continue;
}
}
// for(int i=0;i<n;i++)printf("%d ",T[i]);
// printf("\n");
j=n-1;
while(j>0 && hE[j].val==hE[j-1].val)j--;
i=0;
bool x=false;
while(i<n && j<n){
if(i!=0 && hB[i].val!=hB[i-1].val)break;
if(hB[i].nr==hE[j].nr){
if(T[hB[i].nr]){
x=true;
break;
}
j++;i++;
continue;
}
if(hB[i].nr<hE[j].nr){
i++;continue;
}
if(hB[i].nr>hE[j].nr){
j++;continue;
}
}
// for(int i=0;i<n;i++)printf("%d ",T[i]);
// printf("\n");
if(x)printf("TAK\n");
else printf("NIE\n");
}
int main(){
int a;
scanf("%d",&a);
for(int i=0;i<a;i++)f();
}
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | #include<cstdio> #include<algorithm> #include<vector> using namespace std; bool T[100008]; struct tr{ int val,nr; tr(int val,int nr):val(val),nr(nr){} }; bool operator<(tr A,tr B){ if(A.val<B.val)return true; if(A.val==B.val)return A.nr<B.nr; return false; } void f(){ int n; scanf("%d",&n); vector<tr> wB,wE,hB,hE; for(int i=0;i<n;i++){ T[i]=0; int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); wB.push_back(tr(a,i)); wE.push_back(tr(b,i)); hB.push_back(tr(c,i)); hE.push_back(tr(d,i)); } sort(wB.begin(),wB.end()); sort(wE.begin(),wE.end()); sort(hB.begin(),hB.end()); sort(hE.begin(),hE.end()); // for(int i=0;i<n;i++)printf("%d,%d ",wB[i].val,wB[i].nr); // printf("\n"); // for(int i=0;i<n;i++)printf("%d,%d ",wE[i].val,wE[i].nr); // printf("\n"); // for(int i=0;i<n;i++)printf("%d,%d ",hB[i].val,hB[i].nr); // printf("\n"); // for(int i=0;i<n;i++)printf("%d,%d ",hE[i].val,hE[i].nr); // printf("\n"); int j=n-1; while(j>0 && wE[j].val==wE[j-1].val)j--; int i=0; while(i<n && j<n){ if(i!=0 && wB[i].val!=wB[i-1].val)break; if(wB[i].nr==wE[j].nr){ T[wB[i].nr]=true; j++;i++; continue; } if(wB[i].nr<wE[j].nr){ i++;continue; } if(wB[i].nr>wE[j].nr){ j++;continue; } } // for(int i=0;i<n;i++)printf("%d ",T[i]); // printf("\n"); j=n-1; while(j>0 && hE[j].val==hE[j-1].val)j--; i=0; bool x=false; while(i<n && j<n){ if(i!=0 && hB[i].val!=hB[i-1].val)break; if(hB[i].nr==hE[j].nr){ if(T[hB[i].nr]){ x=true; break; } j++;i++; continue; } if(hB[i].nr<hE[j].nr){ i++;continue; } if(hB[i].nr>hE[j].nr){ j++;continue; } } // for(int i=0;i<n;i++)printf("%d ",T[i]); // printf("\n"); if(x)printf("TAK\n"); else printf("NIE\n"); } int main(){ int a; scanf("%d",&a); for(int i=0;i<a;i++)f(); } |
English