C
Tag
双指针,贪心
定义一个温度区间,\([mn,mx]\),使得这个范围在\(t\)分钟的变化与下一个温度区间产生交集
然后不断的迭代这个区间,如果中途不能与下一个区间产生交集,或者最后区间不存在就输出No
因为客人到达的时间为增序,所以不需要排序
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int t[N],l[N],h[N];
int main() {
int q,n,m;
cin >> q;
while(q --) {
bool flag = 0;
cin >> n >> m;
for(int i = 0;i < n; ++i) {
cin >> t[i] >> l[i] >> h[i];
}
int prev = 0,mn = m,mx = m;//mn == min,mx == max
for(int i = 0;i < n; ++i) {
mn -= t[i] - prev;
mx += t[i] - prev;
if(mn > h[i] || mx < l[i]) {
flag = 1;
break;
}
mn = max(mn,l[i]);
mx = min(mx,h[i]);
prev = t[i];
}
if(flag) cout << "No\n";
else cout << "Yes\n";
}
return 0;
}