题意
给你n个客人和一个初始温度m,每个客人有一个到来的时间
t
i
t_i
ti,一个喜欢的最低温度
l
i
l_i
li一个喜欢的最高温度
h
i
h_i
hi,每个时刻都可以有三种操作,选择温度不变,升高温度,降低温度,问怎么调节温度,是否可以让所有人都有喜欢的温度。
思路
看到这个题,我第一眼想到的是维护一个变量m,维护当前的温度,然后每次选的时候都尽量选择最优的方式来调节温度,尽量保证所有人都满足,但是单独维护一个变量很难确定是否当前维护的是最优的。
这个题只需要判断是否可以满足所有的客人就可以,也就是每个客人来的时刻都可以在客人喜欢的区间内。
我们不应该维护一个温度m,而是可以选择维护一个区间minn,maxx,来代表当前可以选择到调节的温度,如果当前的区间和客人喜欢的区间有交集,那么就说明我们可以满足客人的要求,然后去修改minn的值和maxx的值。
代码
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define me memset
const int N = 110;
const int MOD = 1e9+7;
const int INF = 0x3f3f3f3f;
using namespace std;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
int a[N];
int main()
{
int t;
cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
a[0]=0;
int max1=m;
int min1=m;
int flag=1;
for(int i=1;i<=n;i++)
{
int l,r;
cin>>a[i]>>l>>r;
int k=a[i]-a[i-1];
int tl=min1-k;
int tr=max1+k;
if(tl>r||tr<l)
{
flag=0;
}
else
{
max1=min(tr,r);
min1=max(tl,l);
}
}
if(flag==0)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
return 0;
}