问题描述:
解题思路:
图解:(以题目样例为例子)
注意点:题目的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; // 最大值可能大于1e9for(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;}
知识点:差分,区间整体加值,前缀和