Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct dete{
- int l;
- int r;
- int k;
- };
- int gradovi[100050];
- dete Dete[100050];
- int l[100010];
- int r[100010];
- int k[100010];
- multiset<pair<int,int> >decaUnistavaciKuca;
- bool acmp(dete a,dete b)
- {
- return a.l<b.l;
- }
- bool odradi(int n,int m)
- {
- sort(Dete,Dete+m,acmp);
- int ind=0;
- decaUnistavaciKuca.clear();
- for(int i=1;i<=n;i++)
- {
- multiset<pair<int,int> >::iterator it1=decaUnistavaciKuca.begin();
- while(!decaUnistavaciKuca.empty() && it1->first<i)
- {decaUnistavaciKuca.erase(it1); it1=decaUnistavaciKuca.begin();}
- while(ind<m&&Dete[ind].l==i)
- {
- dete pom;
- //pom.k=Dete[ind].k;
- // pom.r=Dete[ind].r;
- decaUnistavaciKuca.insert(make_pair(Dete[ind].r,Dete[ind].k));
- ind++;
- }
- if(decaUnistavaciKuca.empty())
- {
- return false;
- }
- while(gradovi[i]!=0&&!decaUnistavaciKuca.empty())
- {
- multiset<pair<int,int> >::iterator it=decaUnistavaciKuca.begin();
- int k=it->second;
- int r=it->first;
- if(k>gradovi[i])
- {
- decaUnistavaciKuca.erase(it);
- decaUnistavaciKuca.insert(make_pair(r,k-gradovi[i]));
- gradovi[i]=0;
- /* decaUnistavaciKuca.erase(it);
- dete novo=d;
- novo.k-=gradovi[i];
- decaUnistavaciKuca.*insert(novo);
- gradovi[i]=0;*/
- }
- else
- {
- gradovi[i]-=k;
- decaUnistavaciKuca.erase(it);
- }
- }
- if(gradovi[i]!=0)
- {
- return false;
- }
- }
- return true;
- }
- vector<bool> res;
- int main()
- {
- int n,m,t;
- cin>>t;
- for(int j=0;j<t;j++)
- {
- cin>>n>>m;
- for(int i=1;i<=n;i++)
- cin>>gradovi[i];
- for(int i=0;i<m;i++)
- cin>>Dete[i].l;
- for(int i=0;i<m;i++)
- cin>>Dete[i].r;
- for(int i=0;i<m;i++)
- cin>>Dete[i].k;
- res.push_back(odradi(n,m));
- }
- for(int i=0;i<t;i++)
- {
- if(!res[i])cout<<"NE"<<endl;
- else cout<<"DA"<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement