#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; } |
English