问题描述:
解题思路:
图解:(以题目样例为例子)
注意点:题目的W是每分钟最大出水量,因此有一分钟的用水量大于出水量则不通过。
补充:差分一般用于对一段区间每个元素加相同值(更加高效)。方法即该区间第一个元素加值,区间末尾的下一个元素减值。
题解:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
using ll = long long;
ll d[maxn];
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, w;cin >> n >> w;
for(int i = 1; i <= n; i++)
{
int s, t, p;
cin >> s >> t >> p;
d[s] += p;
d[t] -= p;
}
ll k = 0; // 最大值可能大于1e9
for(int i = 0; i < maxn; i++) // 不能等于maxn,因为数组中元素d[maxn]并不存在
{
k += d[i];
if(k > w){
cout << "No" << '\n';return 0;
}
}
cout << "Yes" << '\n';
return 0;
}
知识点:差分,区间整体加值,前缀和