首页 > 其他分享 >P3572题解

P3572题解

时间:2023-08-16 11:47:02浏览次数:43  
标签:int 题解 cin 队列 P3572 front dp

P3572题解

题面翻译

有 \(n\) 棵树排成一排,第 \(i\) 棵树的高度是 \(d_i\)。

有 \(q\) 只鸟要从第 \(1\) 棵树到第 \(n\) 棵树。

当第 \(i\) 只鸟在第 \(j\) 棵树时,它可以飞到第 \(j+1, j+2, \cdots, j+k_i\) 棵树。

如果一只鸟飞到一颗高度大于等于当前树的树,那么它的劳累值会增加 \(1\),否则不会。

由于这些鸟已经体力不支,所以它们想要最小化劳累值。

题解

考虑一种复杂度为 \(O(n^2q)\) 的朴素做法,显然不可过。

观察题目,发现转移的区间是近似于滑动窗口的。考虑单调队列优化。

对于单调队列有一句经典的话: 如果一个选手比你小,还比你强,你就可以退役了 。我们通常有一个误区,那就是队列内的点都是会产生贡献的转移点,但其实不是。单调队列内的点是有优劣之分的,我们之所以保存其他点,是因为最优的点会退役,而其他点会在之后成为最优点。从某种程度上来说,这与但单调栈是类似的,这也是保证复杂度的关键。

回到本题,我们在队列中留下 \(dp\) 与 \(a\) 相对优的值,线性 \(dp\) 即可。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+100;
int n,a[N],q,k,dp[N];
list<int>z;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	cin>>q;
	while(q--)
	{
		cin>>k;
		z.clear();
		z.push_back(1);
		for(int i=2;i<=n;i++)
		{
			if(z.size()!=0&&i-z.front()>k)
			z.pop_front();
			dp[i]=dp[z.front()]+(a[z.front()]<=a[i]);
			while(z.size()!=0&&(dp[z.back()]>dp[i]||(dp[z.back()]==dp[i]&&a[z.back()]<a[i])))
			z.pop_back();
			z.push_back(i);
		}
		cout<<dp[n]<<endl;
	}
	return 0; 
}

标签:int,题解,cin,队列,P3572,front,dp
From: https://www.cnblogs.com/ddream123/p/17633610.html

相关文章

  • CF1060E Sergey and Subway 题解
    题面由题意可知,在原图中经过边数为\(2\)的一对点,在新图中经过边数为\(1\)。所以每对点在新图中的距离为:\[\begin{aligned}\lceil\frac{dis(i,j)}{2}\rceil=\frac{dis(i,j)+dis(i,j)\;mod\;2}{2}\end{aligned}\]那么我们只需在原图上求出任意两点距离之和并加上\(dis......
  • 国标GB28181视频监控平台EasyGBS国标平台无法播放,抓包返回ICMP的问题解决方案
    国标GB28181视频平台EasyGBS是基于国标GB/T28181协议的行业内安防视频流媒体能力平台,可实现的视频功能包括:实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。国标GB28181视频监控平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的......
  • winform窗体闪烁问题解决方式
    winform窗体闪烁问题解决方式1、使用窗体双缓冲SetStyle(ControlStyles.UserPaint|ControlStyles.AllPaintingInWmPaint|ControlStyles.OptimizedDoubleBuffer,true);UpdateStyles();窗体的DoubleBuffered 指示是否对控件进行双缓存处理。2、使用CreateParams的使用......
  • CF1858C Yet Another Permutation Problem 题解
    杂言赛时想到做法,结果调code把自己心态调炸了,所以来写一篇题解(恼)。另:此题与P9345夕阳西下几时回几乎相同,可以此练手。另另:本题多测,多测不清空,爆零两行泪。题意翻译\(a_1,a_2,\dots,a_n\)是\(1\)至\(n\)的一个排列,记\(d_i=\gcd(a_i,a_{i\bmodn+1})\)。构造一个......
  • CF1188D Make Equal 题解
    题意给定\(n\)个数\(a_1,a_2,\cdots,a_n\),每次操作可以给其中的一个数加上\(2\)的非负整数次幂。求最小的操作次数,使得这\(n\)个数相等。题解首先考虑如何计算操作次数,设\(maxa=\max\limits_{i=1}^{n}a_i\),如果我们把这\(n\)个数操作成了数\(x\)(\(x\gemax......
  • [ARC096E] Everything on It 题解
    题意对于集合\({1,2,\cdots,n}\),求它的子集族中,有多少个满足:任意两个子集互不相同;\(1,2,\cdots,n\)都在其中至少出现了\(2\)次。\(n\le3000\),答案对\(M\)取模。题解第一个限制形同虚设,下面着重考虑第二个限制。考虑到第二个限制集合的每个元素都是等价的,考虑二项......
  • [ABC134F] Permutation Oddness 题解
    题面定义一个\(1\simn\)的排列\(p\)的「怪异度」为\[\sum_{i=1}^n\left\lvertp_i-i\right\rvert\]求「怪异度」为\(k\)的\(1\simn\)的排列数,答案对\(10^9+7\)取模。题解考虑转化计算怪异度的过程,我们将值\(p_i\)排列在左侧,将下标\(i\)排列在右侧,构成一个......
  • 『题解』ABC261Ex Game on Graph
    题目链接震惊!这个题竟然被神犇szs放进了博弈论里!我真的没看出来除了题面还有哪里像博弈论(也许是因为我菜)。转移方式很显然,按照题面说的做就行了。那么正解也就呼之欲出了。但是我知道大家都会正解,就是魔改的堆优化Dijkstra,所以我想说的是一种歪解,以及它是歪解的原因。歪解......
  • 国标GB28181视频平台EasyGBS国标平台设备播放断流现象的问题解决方案
    安防视频监控EasyGBS平台基于国标GB28181协议,支持多路设备接入,并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等多种格式的视频流。平台可为大数据等综合性监管平台提供极强的视频能力,已经在大量的项目中落地应用,如明厨亮灶、平安乡村、雪亮工程等。有用户反馈,在安防视频监......
  • 视频汇聚平台EasyCVR安防监控视频汇聚平台的FLV视频流在VLC中无法播放的问题解决方案
    众所周知,TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入,包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。在视频流的处理与分发上,视频监控汇聚平台EasyCVR的性能也同样表现得很优秀,平台可对外分发多格式的视......