#include<cstdio> #include<vector> #include<algorithm> using namespace std; int tab[100001][3]; int drzewko[100001]; int main(){ int t; scanf("%d", &t); for(int tt=1; tt<=t; tt++){ int n,w; scanf("%d%d", &n, &w); vector<pair<int,int> > k1, k2; for(int i=1; i<=n; i++){ int x1, x2,y1, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); if(x1>x2) swap(x1,x2); if(y1>y2) swap(y1, y2); tab[i][0]=x1; k1.push_back(make_pair(x1, i)); tab[i][2]=y2-y1; } for(int i=1; i<=n; i++){ int x1, x2,y1, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); if(x1>x2) swap(x1,x2); if(y1>y2) swap(y1, y2); tab[i][1]=x1; k2.push_back(make_pair(x1,i)); } sort(k1.begin(), k1.end()); sort(k2.begin(), k2.end()); for(int i=0; i<n; i++){ tab[k1[i].second][0]=i+1; tab[k2[i].second][1]=i+1; } for(int i=1; i<=n; i++) drzewko[i]=0; int czy=1; for(int j=n-1; j>=0 && czy==1 ; j--){ int s=k1[j].second; int p=tab[s][1]; int mi=0; for(int i=p; i>0; i-=i & (-i)) mi=max(mi, drzewko[i]); if(mi+tab[s][2]>w) czy=0; for(int i=p; i<=n; i+=i &(-i)) drzewko[i]=max(tab[s][2], drzewko[i]); } if(czy==1) printf("TAK\n"); else printf("NIE\n"); } }
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 | #include<cstdio> #include<vector> #include<algorithm> using namespace std; int tab[100001][3]; int drzewko[100001]; int main(){ int t; scanf("%d", &t); for(int tt=1; tt<=t; tt++){ int n,w; scanf("%d%d", &n, &w); vector<pair<int,int> > k1, k2; for(int i=1; i<=n; i++){ int x1, x2,y1, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); if(x1>x2) swap(x1,x2); if(y1>y2) swap(y1, y2); tab[i][0]=x1; k1.push_back(make_pair(x1, i)); tab[i][2]=y2-y1; } for(int i=1; i<=n; i++){ int x1, x2,y1, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); if(x1>x2) swap(x1,x2); if(y1>y2) swap(y1, y2); tab[i][1]=x1; k2.push_back(make_pair(x1,i)); } sort(k1.begin(), k1.end()); sort(k2.begin(), k2.end()); for(int i=0; i<n; i++){ tab[k1[i].second][0]=i+1; tab[k2[i].second][1]=i+1; } for(int i=1; i<=n; i++) drzewko[i]=0; int czy=1; for(int j=n-1; j>=0 && czy==1 ; j--){ int s=k1[j].second; int p=tab[s][1]; int mi=0; for(int i=p; i>0; i-=i & (-i)) mi=max(mi, drzewko[i]); if(mi+tab[s][2]>w) czy=0; for(int i=p; i<=n; i+=i &(-i)) drzewko[i]=max(tab[s][2], drzewko[i]); } if(czy==1) printf("TAK\n"); else printf("NIE\n"); } } |