Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct dete{
  6. int l;
  7. int r;
  8. int k;
  9. };
  10.  
  11. int gradovi[100050];
  12. dete Dete[100050];
  13. int l[100010];
  14. int r[100010];
  15. int k[100010];
  16. multiset<pair<int,int> >decaUnistavaciKuca;
  17.  
  18. bool acmp(dete a,dete b)
  19. {
  20. return a.l<b.l;
  21. }
  22.  
  23. bool odradi(int n,int m)
  24. {
  25. sort(Dete,Dete+m,acmp);
  26. int ind=0;
  27. decaUnistavaciKuca.clear();
  28. for(int i=1;i<=n;i++)
  29. {
  30. multiset<pair<int,int> >::iterator it1=decaUnistavaciKuca.begin();
  31. while(!decaUnistavaciKuca.empty() && it1->first<i)
  32. {decaUnistavaciKuca.erase(it1); it1=decaUnistavaciKuca.begin();}
  33.  
  34.  
  35. while(ind<m&&Dete[ind].l==i)
  36. {
  37. dete pom;
  38. //pom.k=Dete[ind].k;
  39. // pom.r=Dete[ind].r;
  40. decaUnistavaciKuca.insert(make_pair(Dete[ind].r,Dete[ind].k));
  41. ind++;
  42. }
  43. if(decaUnistavaciKuca.empty())
  44. {
  45. return false;
  46. }
  47. while(gradovi[i]!=0&&!decaUnistavaciKuca.empty())
  48. {
  49. multiset<pair<int,int> >::iterator it=decaUnistavaciKuca.begin();
  50. int k=it->second;
  51. int r=it->first;
  52. if(k>gradovi[i])
  53. {
  54. decaUnistavaciKuca.erase(it);
  55. decaUnistavaciKuca.insert(make_pair(r,k-gradovi[i]));
  56. gradovi[i]=0;
  57. /* decaUnistavaciKuca.erase(it);
  58. dete novo=d;
  59. novo.k-=gradovi[i];
  60. decaUnistavaciKuca.*insert(novo);
  61. gradovi[i]=0;*/
  62. }
  63. else
  64. {
  65. gradovi[i]-=k;
  66. decaUnistavaciKuca.erase(it);
  67. }
  68. }
  69. if(gradovi[i]!=0)
  70. {
  71. return false;
  72. }
  73. }
  74. return true;
  75. }
  76.  
  77.  
  78. vector<bool> res;
  79.  
  80. int main()
  81. {
  82. int n,m,t;
  83. cin>>t;
  84. for(int j=0;j<t;j++)
  85. {
  86. cin>>n>>m;
  87. for(int i=1;i<=n;i++)
  88. cin>>gradovi[i];
  89.  
  90. for(int i=0;i<m;i++)
  91. cin>>Dete[i].l;
  92.  
  93. for(int i=0;i<m;i++)
  94. cin>>Dete[i].r;
  95.  
  96. for(int i=0;i<m;i++)
  97. cin>>Dete[i].k;
  98.  
  99. res.push_back(odradi(n,m));
  100. }
  101. for(int i=0;i<t;i++)
  102. {
  103. if(!res[i])cout<<"NE"<<endl;
  104. else cout<<"DA"<<endl;
  105. }
  106. return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement