Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.65 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int visina[100010];
  6. struct child
  7. {
  8. int l, r, k;
  9. };
  10. struct struk
  11. {
  12. int r, k;
  13. };
  14. child dete[100010];
  15. multiset<struk> skup;
  16. bool res[10];
  17.  
  18. inline bool operator<(const struk& a, const struk& b)
  19. {
  20. return a.r<b.r;
  21. }
  22. bool sortiraj(child a, child b)
  23. {
  24. if (a.l == b.l) return a.r < b.r;
  25. return a.l < b.l;
  26. }
  27.  
  28. void ulaz(int m)
  29. {
  30. for(int i = 0; i < m; i++)
  31. {
  32. int x;
  33. cin >> x;
  34. dete[i].l = x-1;
  35. }
  36. for(int i = 0; i < m; i++)
  37. {
  38. int x;
  39. cin >> x;
  40. dete[i].r = x-1;
  41. }
  42. for(int i = 0; i < m; i++)
  43. {
  44. int x;
  45. cin >> x;
  46. dete[i].k = x;
  47. }
  48. }
  49.  
  50. int main()
  51. {
  52. ios_base::sync_with_stdio(false);
  53. cin.tie(NULL);
  54.  
  55. int t;
  56. cin >> t;
  57. for(int u = 0; u < t; u++)
  58. {
  59. int n, m;
  60. cin >> n >> m;
  61.  
  62. for(int i = 0; i < n; i++) cin >> visina[i];
  63.  
  64. ulaz(m);
  65.  
  66. sort(dete, dete + m, sortiraj);
  67.  
  68. int pok = 0;
  69. bool ok = true;
  70. for(int i = 0 ; i < n; i++)
  71. {
  72. while(pok < m) /// dodajem decu
  73. {
  74. if(dete[pok].l==i)
  75. {
  76. struk pom;
  77. pom.k = dete[pok].k;
  78. pom.r = dete[pok].r;
  79. skup.insert(pom);
  80. pok++;
  81. }
  82. else break;
  83. }
  84.  
  85. while(!skup.empty()) /// brisem decu
  86. {
  87. struk pom = *skup.begin();
  88. if(pom.r < i) skup.erase(*skup.begin());
  89. else break;
  90. }
  91.  
  92. while(visina[i] > 0)
  93. {
  94. if(skup.empty()) {ok = false; break; }
  95. struk pom = *skup.begin();
  96. if(pom.k < visina[i])
  97. {
  98. visina[i]-=pom.k;
  99. skup.erase(skup.begin());
  100. }
  101. else
  102. {
  103. if(pom.k == visina[i]) skup.erase(*skup.begin());
  104. else
  105. {
  106. pom.k -= visina[i];
  107. skup.erase(*skup.begin());
  108. skup.insert(pom);
  109. }
  110.  
  111. visina[i] = 0;
  112. }
  113. }
  114. if(!ok) break;
  115. }
  116. if(ok) res[u] = true;
  117. skup.clear();
  118. }
  119.  
  120. for(int i = 0; i < t; i++)
  121. {
  122. if(res[i]) cout << "DA" << "\n";
  123. else cout << "NE" << "\n";
  124. }
  125.  
  126. return 0;
  127. }
  128.  
  129. /*
  130. 1
  131. 3 2
  132. 1 4 2
  133. 1 2
  134. 3 3
  135. 3 4
  136. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement