C. Air Conditioner(区间交集)

题意
给你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;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值