C. Air Conditioner(区间交集)

Posted zjj0624

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

以上是关于C. Air Conditioner(区间交集)的主要内容,如果未能解决你的问题,请参考以下文章

CF1304C Air Conditioner

Codeforces 1304C. Air Conditioner

Codeforces Round #620 Div2C Air Conditioner

Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) C. Fountains 树状数组维护区间最大值(示(代

C. Destroying Array 并查集/线段树 Intel Code Challenge Elimination Round (Div. 1 + Div. 2, combined)(示例代

华为机试真题 Java 实现区间交集