首页 > 其他分享 >P3522 [POI2011] TEM-Temperature

P3522 [POI2011] TEM-Temperature

时间:2024-07-21 17:09:50浏览次数:17  
标签:Temperature int POI2011 P3522 端点 ans front 大于 left

原题链接

题解

尽量直观地理解单调队列的作用

首先,对于合法的一段,有如下性质 A 满足:

  • 当前的最高温度大于等于前面的最大的最低温度

该性质对于段内每一个数都满足,所以对于第 \(i\) 天,我们可以找其前面的第一天 \(j\) 的最低温度大于 \(i\) 的最高温度,同时还要满足 \((j,i]\) 内性质 A 满足

我们做如下分析:

1.如果 \(i\) 天的最高温度小于 \(i-1\) 天的最低温度,那么后面以任意天作为右端点的段的左端点都不可能小于 \(i\),即掉了

2.假设我们已知以 \(i-1\) 为右端点的段,且 \(r[i]\geq l[i-1]\) ,那么以 \(i\) 为右端点的段的左端点 \(left[i]\) 不可能小于 以 \(i-1\) 为右端点的段的左端点 \(left[i-1]\),因为需要满足 \([left[i-1],i-1]\) 内的点满足性质A

  1. 经过上述分析,我们发现,以每个点为右端点的段,其左端点是单调不降的,因此有点类似于 双指针,我们可以线性维护

  2. 在左端点右移的过程中,由于我们需要一直右移到 \([left[i],i]\) 内的最大的 \(l\) 不大于 \(r_i\) ,所以我们还需要添加一个数据结构来维护所有的 \(l\)

  3. 假设我们用数组,顺序维护 \(left[i],i\) 内所有的l,先不计时间复杂度,我们找到该范围内最大的 \(l\) ,判断其与 \(r_i\) 的大小,如果大了,把该 \(l\) 所在位置及其左边所有的 点,全部清空,如此一直循环,直至 \(l\leq r[i]\) 或者数组大小为零,便退出。

因此,我们可以从左到右维护一个 \(l\) 单调减,\(id\) 单调增的队列,如果队首元素大于 \(r_i\) 就弹出,代表其及其前面所有点都被清空,同时再添加一个数组累积队内元素到前面第一个大于该元素的数之间有多少不大于它的数,即其(队首)左边所有点的个数

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;

int l[1000005],r[1000005];
int hide[1000005]={0};

void solve()
{
    int n;
    cin>>n;

    for(int i=1;i<=n;i++) cin>>l[i]>>r[i];

    deque<int> q;


    int ans=1;
    for(int i=1;i<=n;i++)
    {

        while(q.size()&&l[q.front()]>r[i]) q.pop_front();


        if(q.size()) ans=max(ans,i-q.front()+1+hide[q.front()]);

        while(q.size()&&l[q.back()]<=l[i])
        {
            hide[i]+=hide[q.back()]+1;
            q.pop_back();
        }
        q.push_back(i);
    }
    cout<<ans;
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t=1;
    while(t--) solve();
    return 0;
}


标签:Temperature,int,POI2011,P3522,端点,ans,front,大于,left
From: https://www.cnblogs.com/pure4knowledge/p/18314668

相关文章

  • ollama temperature 作用
    在机器学习,尤其是深度学习和自然语言处理领域中,temperature参数通常指的是softmax函数或采样策略中的一个控制变量。它影响模型输出的概率分布,进而影响模型生成的输出的随机性和多样性。 在ollama/api/generate的API接口中,temperature是一个可选参数,属于options部分......
  • P3523 POI2011 DYN-Dynamite
    P3523POI2011DYN-Dynamite小trick,加双倍经验。思路使\(dis\)的最大值最小,可以想到二分\(dis\),然后根据\(dis\)判断可行性。那么可以把问题转化为,所有关键点到选择的点的距离小于\(dis\)的前提下,使得使用的点的个数最小。这就是:P3942将军令考虑设\(f[u]\)为距离......
  • 【代码】--库函数学习 temperature.c
    1. 封装的函数   用到了内核中的hwmon子系统,   hwmon子系统作为Linux内核中的一个子系统,用于监控硬件传感器的状态(设备的温度、电压和风扇转速)和提供对硬件传感器的访问接口。   在应用层,对传感器信息的读取,本质上是对驱动中hwmon子系统在注册传感器设备时所......
  • RPhy2025电阻与温度换算计算器Resistor and temperature computer 2025 download
    本计算器可以计算电阻当前值、20摄氏度时的标准值、当前温度、温度差值、电阻温度系数之间的计算。本计算器带一个常见的物质的电阻温度系数的选择表。本软件是x64的软件,支持Win平台。价格便宜,只要50人民币或15美元或者欧元即可长期合法使用。价格廉价,没人付不起。Thiscalcula......
  • POI2011ROZ-Difference
    POI#Year2011#枚举#贪心枚举最后差最大的两个字符\(a,b\),将原串中\(a\rightarrow1,b\rightarrow-1\),其他标\(0\)原来的问题转化为强制包含\(1,-1\)的最大字段和问题,维护每个位置前最近的\(-1\),贪心取最大的//Author:xiaruizeconstintMOD=1000000007;const......
  • POI2011PRO-Programming Contest
    POI#Year2011#Dinic#网络流#贪心容易想到拆点的费用流做法,但是二分再拆点的时间复杂度是不可接受的考虑因为每个的时间\(r\)是定值,所以不可能出现做题个数差超过\(1\)的情况所以每一轮每个分配一个,用\(Dinic\)在推进一次,知道满流//Author:xiaruizeconstintN=......
  • POI2011MET-Meteors
    POI#Year2011#整体二分整体二分板子,用树状数组维护即可//Author:xiaruizeconstintN=1e6+10;intn,m,t;vector<int>vec[N];structnode{ intl,r,x;}s[N];piia[N];structBIT{ inttr[N]; voidadd(intx,intv) { while(x<=m*2) { ......
  • POI2011LIZ-Lollipop
    POI#Year2011#构造#妙妙题假设能取到\(x\),那么\(\forally\),\(x,y\)奇偶性相同,\(x>y\),\(y\)一定可以是\(x\)的一个子区间,处理奇数和偶数的最大值,离线,从大到小做//Author:xiaruizeconstintN=1e6+10;intn,m;inta[N],s[N];piist,en;piiqry[N];p......
  • POI2011Lightning Conductor
    POI#Year2011#dp#决策单调性令\(dp_i=\max\limits_{j=1}^{i-1}{a_j+\sqrt{i-j})}\)\(w(j,i)=\sqrt{i-j}\)满足四边形不等式所以这个\(dp\)具有决策单调性,分治维护//Author:xiaruizeconstintN=5e5+10;intn;inta[N];doubledp[N];doublew(intx,inty......
  • POI2011KON-Conspiracy
    POI#Year2011#数学考虑按照\(deg\)排序,然后暴力加入,这样可以得到一个极大的子集方案数分两种,一种为从团内去掉一个\(deg=siz-1\)的点,或者是将一个团外的\(deg=siz-1\)的点与一个团内的交换//Author:xiaruizeconstintINF=0x3f3f3f3f3f3f3f3f;constintMOD=10......