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(区间交集)的主要内容,如果未能解决你的问题,请参考以下文章
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)(示例代