4 solutions

  • 0
    @ 2023-8-28 13:20:10
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    // #define x first
    // #define y second
    const int N=2e5+10;
    int n,m;
    int s[N];//每台计算机的算力
    // typedef pair<int,int> PII;//<结束时刻,算力>
    // priority_queue<PII,vector<PII>,greater<PII> > q[N];//每台计算机任务
    //greater 升序,小根堆;less 降序,大根堆
    struct PII{
        int x,y;
        bool operator>(const PII &s) const{
            if(x>s.x || (x==s.x&&y>s.y))
                return true;
            else
                return false;
        }
    };
    priority_queue<PII,vector<PII>,greater<PII> > q[N];
    
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    		cin>>s[i];
    	for(int i=1;i<=m;i++){
    		int a,b,c,d;
    		cin>>a>>b>>c>>d;
    		while(q[b].size() && q[b].top().x <=a){
    			s[b] += q[b].top().y;
    			q[b].pop();
    		}
    		if(s[b]<d)
    			cout<<"-1";
    		else{
    			q[b].push({a+c,d});//a+c:开始时刻+持续时间->结束时间
    			s[b]-=d;
    			cout<<s[b];
    		}
    		cout<<endl;
    	}
    }
    

    Information

    ID
    1548
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    4
    Tags
    # Submissions
    188
    Accepted
    37
    Uploaded By