样例说明
在时间段 [2,3)[2,3) 分钟内,第 11 个人需要 33 升热水,第 22 个人也需要 33 升热水,总共需要 66 升热水,此时热水器无法满足。
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 3;
using ll = long long;
ll prefix[N]; //前缀和数组
//利用前缀和的好处
//1、不用初始化原来的数组
//2、降低循环次数,将时间复杂度降低为O(N)
int main()
{
ll n, w; cin >> n >> w;
ll Max = 0;//记录最大的洗澡时间点 待会遍历
for (int i = 1; i <= n; i++)
{
ll s, t ,p; cin >> s >> t >> p;
prefix[s] += p;//更新前缀和数组
prefix[t] -= p;
Max = max(Max,t);
}
int flag = 1;
for (ll i = 1; i <= Max; i++) prefix[i] += prefix[i-1];
for (ll i = 0; i <= Max; i++)
{
if (prefix[i] > w)
{
cout << "No" << '\n';
flag = 0;
break;
}
}
if (flag)
cout << "Yes" << '\n';
}