解法
シュミレーション. 時刻毎のイベントを priority queue に入れておく. 食べるイベントと,人が復帰するイベントに分ける.
注意
人が復帰するのと,食べるイベントが同時刻の場合, 人が復帰するのを先に行うので,priority queue の順序に注意.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
int main() {
ll n,m;
cin >> n >> m;
min_priority_queue<tuple<ll,ll,ll>> ev;
rep(i,m){
ll t,w,s; cin >> t >> w >> s;
ev.push({t,w,s});
}
set<ll> hu; rep(i,n) hu.insert(i);
vll ans(n+1);
while(ev.size()){
auto [t,w,s] = ev.top(); ev.pop();
if(w > 0){
ll ind = n;
if(hu.size()) ind = *(hu.begin());
ans[ind] += w;
hu.erase(ind);
ev.push({t+s, -1, ind}); // -1 < (そうめんの量) なので,同じ時刻は復帰優先
}else{
hu.insert(s);
}
}
rep(i,n){
cout << ans[i] << endl;
}
return 0;
}