問題文の条件を言いかえると、
番目のパーティについて、以下のイベントが起こると考えてよいです。
よって、日にちの順にパーティのイベントを並び替えて、前から累積和を取ることによって、毎日 個以上の飴を食べる日が容易に分かります。
が十分大きい場合には、日にちごとに処理していては間に合わないため、前回のパーティのイベントとの日にちの差分を取る必要があります。
ソートがボトルネックとなるため、計算量は全体で となります。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, m, k; cin >> n >> m >> k;
vector<int> l(m), r(m), c(m);
for(int i = 0; i < m; i++){
cin >> l[i] >> r[i] >> c[i];
}
vector<pair<int, int>> p;
for(int i = 0; i < m; i++){
p.push_back(make_pair(l[i], c[i]));
p.push_back(make_pair(r[i] + 1, -c[i]));
}
sort(p.begin(), p.end());
long long ans = 0, candy = 0, before = -1;
for(auto x : p){
if(candy >= k){
ans += x.first - before;
}
candy += x.second;
before = x.first;
}
cout << ans << endl;
}