#include <iostream> #include <cstdio> #include <vector> #include <algorithm> #include <queue> using namespace std; struct zad { int id; int c; int p; }; zad pr; vector<zad> v[1000005], u[1000005], ob; int n, m, a, b, d, kk, pp=1000005; bool czy, in[1000005]; queue<int> del; bool cmp(zad x, zad y) { if(x.p>y.p) return 1; else if(x.p==y.p) { if(x.c<y.c) return 1; else return 0; } else return 0; } int main() { scanf("%d", &n); scanf("%d", &m); for(int i=1;i<=n;i++) { scanf("%d%d%d", &a,&b,&d); pr.id=i; pr.c=d; pr.p=a; v[b].push_back(pr); u[a].push_back(pr); kk=max(kk,b); pp=min(pp,a); } for(int i=pp;i<=kk;i++) sort(v[i].begin(),v[i].end(),cmp); for(int j=kk;j>=pp;j--) { for(int i=0;i<v[j].size();i++) ob.push_back(v[j][i]); for(int i=0;i<u[j].size();i++) if(!in[u[j][i].id]) { czy=1; goto koniec; } int y=ob.size(); for(int i=y-1;i>=0 && i>=y-m;i--) { ob[i].c-=1; if(ob[i].c==0) { in[ob[i].id]=1; del.push(i); } } int x=0; while(!del.empty()) { ob.erase(ob.begin()+del.front()); del.pop(); } } koniec: if(czy) printf("NIE"); else printf("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 65 66 67 68 69 70 71 72 73 | #include <iostream> #include <cstdio> #include <vector> #include <algorithm> #include <queue> using namespace std; struct zad { int id; int c; int p; }; zad pr; vector<zad> v[1000005], u[1000005], ob; int n, m, a, b, d, kk, pp=1000005; bool czy, in[1000005]; queue<int> del; bool cmp(zad x, zad y) { if(x.p>y.p) return 1; else if(x.p==y.p) { if(x.c<y.c) return 1; else return 0; } else return 0; } int main() { scanf("%d", &n); scanf("%d", &m); for(int i=1;i<=n;i++) { scanf("%d%d%d", &a,&b,&d); pr.id=i; pr.c=d; pr.p=a; v[b].push_back(pr); u[a].push_back(pr); kk=max(kk,b); pp=min(pp,a); } for(int i=pp;i<=kk;i++) sort(v[i].begin(),v[i].end(),cmp); for(int j=kk;j>=pp;j--) { for(int i=0;i<v[j].size();i++) ob.push_back(v[j][i]); for(int i=0;i<u[j].size();i++) if(!in[u[j][i].id]) { czy=1; goto koniec; } int y=ob.size(); for(int i=y-1;i>=0 && i>=y-m;i--) { ob[i].c-=1; if(ob[i].c==0) { in[ob[i].id]=1; del.push(i); } } int x=0; while(!del.empty()) { ob.erase(ob.begin()+del.front()); del.pop(); } } koniec: if(czy) printf("NIE"); else printf("TAK"); return 0; } |