Advertisement
Guest User

Untitled

a guest
Nov 27th, 2016
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.31 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define FOR(i,n) for(int i=0; i < int(n); ++i)
  5. #define FO(i,a,b) for(int i=int(a); i<int(b); ++i)
  6. #define OF(i,a,b) for(int i=int(b)-1; i>=int(a); --i)
  7.  
  8. typedef long long ll;
  9. typedef pair<int,int> pii;
  10.  
  11. typedef vector<int> vi;
  12. typedef vector<vi> vvi;
  13. typedef vector<pii> vpii;
  14.  
  15. #define siz size()*1LL
  16.  
  17. #define fi first
  18. #define se second
  19.  
  20. #define ASS assert
  21.  
  22. #define remin(a,b) a=min(a,b)
  23. #define remax(a,b) a=max(a,b)
  24.  
  25. #define ALL(c) (c).begin(), (c).end()
  26.  
  27. #define NL '\n'
  28.  
  29. #define D //if(0)
  30. //#define cerr if(0)cerr
  31.  
  32.  
  33.  
  34. inline int rint(){
  35.     int i = 0;
  36.     scanf("%d", &i);
  37.     return i;
  38. }
  39.  
  40.  
  41.  
  42. struct PKC{
  43.     int p,k,c;
  44. };
  45.  
  46.  
  47.  
  48.  
  49. inline void merge(pii a[], int as, pii b[], int bs, pii c[], int& cs){
  50.     cs = 0;
  51.     int ia = 0;
  52.     int ib = 0;
  53.    
  54.     while(ia < as && ib < bs){
  55.         if(a[ia].fi < b[ib].fi) c[cs++] = a[ia++];
  56.         else c[cs++] = b[ib++];
  57.     }
  58.    
  59.     while(ia < as) c[cs++] = a[ia++];
  60.     while(ib < bs) c[cs++] = b[ib++];
  61. }
  62.  
  63. int main(){
  64.     int n = rint();
  65.     int m = rint();
  66.    
  67.     vector<PKC> d;
  68.    
  69.     FOR(i,n){
  70.         int p = rint();
  71.         int k = rint();
  72.         p = 1000003 - p;
  73.         k = 1000003 - k;
  74.         swap(p,k);
  75.         int c = rint();
  76.         d.push_back({p,k,c});
  77.     }
  78.    
  79.     pii ma[2][109];
  80.     int ma_size[2] = {0,0};
  81.    
  82.     pii temp[109];
  83.     int temp_size = 0;
  84.    
  85.     int cma = 0;
  86.    
  87.     sort(ALL(d), [](PKC a, PKC b){if(a.p == b.p) return a.k - a.c > b.k - b.c; return a.p > b.p;});
  88.        
  89.     FOR(i,1000009){
  90.        
  91.         temp_size = 0;
  92.         while(!d.empty() && d.back().p == i){
  93.             auto t = d.back();
  94.             d.pop_back();
  95.            
  96.             temp[temp_size++] = pii{t.k - t.c, t.c};
  97.         }
  98.        
  99.         if(temp_size > 0){
  100.             merge(ma[cma], ma_size[cma], temp, temp_size, ma[!cma], ma_size[!cma]);
  101.             cma = !cma;
  102.         }
  103.        
  104.         if(ma_size[cma] > 0 && ma[cma][0].fi < i){
  105.             puts("NIE");
  106.             return 0;
  107.         }
  108.        
  109.        
  110.         int zmiany = min(m,(int)ma_size[cma]);
  111.         int w = 0;
  112.         FOR(j, zmiany){
  113.             ++ma[cma][j].fi;
  114.             if(w != j) ma[cma][w] = ma[cma][j];
  115.             if(--ma[cma][j].se > 0){
  116.                 ++w;
  117.             }
  118.         }
  119.        
  120.         if(ma[cma][w-1].fi > ma[cma][zmiany].fi){
  121.             merge(ma[cma], w, ma[cma] + zmiany, ma_size[cma]-zmiany, ma[!cma], ma_size[!cma]);
  122.             cma = !cma;
  123.         }
  124.         else if(w < zmiany){
  125.             int diff = zmiany - w;
  126.             FO(j, zmiany, ma_size[cma]) ma[cma][j-diff] = ma[cma][j];
  127.             ma_size[cma] -= diff;
  128.         }
  129.     }
  130.    
  131.     puts("TAK");
  132.     return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement