#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Procesik {
    int p;
    int k;
    int z;
    
    Procesik(int p, int k, int z)
    : p(p)
    , k(k)
    , z(z) {}
    bool operator<(const Procesik& p2) const{
        return k - z < p2.k - p2.z;
    }
};
int l, j, k, m, n;
vector<Procesik> pv;
vector<Procesik> actives;
bool funkcj(const Procesik& p1, const Procesik& p2){
    return p1.p < p2.p;
}
void pp(Procesik p1, int i){
    cout << p1.p << " " << p1.k << " " << p1.z << " (" << p1.k - i + 1 - p1.z << ")" << endl;
}
int main() {
    cin >> n >> m;
    int pmin = 1000001;
    int kmax = -1;
    for(int i = 0; i < n; ++i){
        cin >> l >> j >> k;
        j -= 1;
        if(l < pmin){
            pmin = l;
        }
        if(j > kmax){
            kmax = j;
        }
        pv.push_back(Procesik(l, j, k));
    }
    sort(pv.begin(), pv.end(), funkcj);
    int pidx = 0;
    // cout << "MIN/MAX:" << endl;
    // cout << pmin << " " << kmax << endl;
    for(int i = pmin; i <= kmax; ++i){
        // cout << "BEFORE MOMENT " << i << endl;
        while(true){
            if(pidx < n && pv[pidx].p <= i){
                actives.push_back(pv[pidx]);
                ++pidx;
            }else{
                break;
            }
        }
        sort(actives.begin(), actives.end());
        // cout << "ACTIVE PROCESSES:" << endl;
        // for(int j = 0; j < int(actives.size()); ++j){
        //     pp(actives[j], i);
        // }
        int posbs = min(int(actives.size()), m);
        // cout << "CAN EXECUTE " << posbs << endl;
        if(int(actives.size()) > posbs){
            if(actives[posbs].z > actives[posbs].k - i + 1){
                cout << "NIE" << endl;
                return 0;
            }
        }
        for(int i = 0; i < posbs; ++i){
            actives[i].z -= 1;
            if(actives[i].z == 0){
                actives.erase(actives.begin() + i);
                i--;
                posbs--;
            }
        }
    }
    
    if(actives.size() > 0){
        cout << "NIE" <<endl;
        return 0;
    }
    
    cout << "TAK" << endl;
    /*
    for(unsigned i = 0; i < pv.size(); ++i){
        cout << pv[i].p << " " << pv[i].k << " " << pv[i].z << endl;
    }
    */
    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 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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; struct Procesik { int p; int k; int z; Procesik(int p, int k, int z) : p(p) , k(k) , z(z) {} bool operator<(const Procesik& p2) const{ return k - z < p2.k - p2.z; } }; int l, j, k, m, n; vector<Procesik> pv; vector<Procesik> actives; bool funkcj(const Procesik& p1, const Procesik& p2){ return p1.p < p2.p; } void pp(Procesik p1, int i){ cout << p1.p << " " << p1.k << " " << p1.z << " (" << p1.k - i + 1 - p1.z << ")" << endl; } int main() { cin >> n >> m; int pmin = 1000001; int kmax = -1; for(int i = 0; i < n; ++i){ cin >> l >> j >> k; j -= 1; if(l < pmin){ pmin = l; } if(j > kmax){ kmax = j; } pv.push_back(Procesik(l, j, k)); } sort(pv.begin(), pv.end(), funkcj); int pidx = 0; // cout << "MIN/MAX:" << endl; // cout << pmin << " " << kmax << endl; for(int i = pmin; i <= kmax; ++i){ // cout << "BEFORE MOMENT " << i << endl; while(true){ if(pidx < n && pv[pidx].p <= i){ actives.push_back(pv[pidx]); ++pidx; }else{ break; } } sort(actives.begin(), actives.end()); // cout << "ACTIVE PROCESSES:" << endl; // for(int j = 0; j < int(actives.size()); ++j){ // pp(actives[j], i); // } int posbs = min(int(actives.size()), m); // cout << "CAN EXECUTE " << posbs << endl; if(int(actives.size()) > posbs){ if(actives[posbs].z > actives[posbs].k - i + 1){ cout << "NIE" << endl; return 0; } } for(int i = 0; i < posbs; ++i){ actives[i].z -= 1; if(actives[i].z == 0){ actives.erase(actives.begin() + i); i--; posbs--; } } } if(actives.size() > 0){ cout << "NIE" <<endl; return 0; } cout << "TAK" << endl; /* for(unsigned i = 0; i < pv.size(); ++i){ cout << pv[i].p << " " << pv[i].k << " " << pv[i].z << endl; } */ return 0; } | 
 
            
         English
                    English