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