堆数组的模拟用法
作者:
古德古德
,
2022-04-07 15:07:49
,
所有人可见
,
阅读 163
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII;
const int N = 2e5+10;
int n, m;
priority_queue<PII, vector<PII>, greater<PII>> q[N];
int sl[N];
int main()
{
cin >> n >> m;
for(int i = 1 ; i <= n ; i++) cin >> sl[i];
while (m -- )
{
int a,b,c,d; cin >> a >> b >> c >> d;
while(q[b].size() && q[b].top().x <= a)
{
sl[b] += q[b].top().y;
q[b].pop();
}
if(sl[b] >= d)
{
sl[b] -= d;
q[b].push({a+c,d});
cout << sl[b]<<endl;
}
else
{
cout << "-1"<< endl;
}
}
return 0;
}