首页 > 其他分享 >回旋加速器

回旋加速器

时间:2023-09-26 15:34:34浏览次数:38  
标签:满足条件 ch int void TP writeln 回旋 加速器

前言:

追着单调队列来的,写完发现题解的其他技巧蚌埠住了。

正题:

题目传送门

我们可以先对每个加速腔处理,将 $ e_i - d_i $(以下称为 $ d_i $)作为从 $ i $ 到 $ i+1 $ 的成本。因为我是单调队列的做法,显然难以处理环,于是可以断环成链,再做观察。

题目要求绕环一周,断成链后即为从 $ i $ 出发到达 $ i+n $。即要求对于 $ \forall k \in [i,i+n-1] $ 满足:

\[\sum ^{k}_ {j=i}d_j \ge 0 \]

因此我们可以先处理成前缀和。设:

\[s_i = \sum ^{i} _ {j=1} d_i \]

这样,条件就变成了对于 $ \forall k \in [i,i+n-1] $ 满足:

\[s_k - s_{i-1} \ge 0 \]

然后发现,只要尝试 $ [i,i+n-1] $ 中 $ s_{min} $ 是否满足条件,就可以得出答案。于是就可以用单调队列维护最小值啦!至于要求编号最小的,可以从 $ 1 $ 递推至 $ n $,第一个满足条件的即为编号最小的。若递推至 $ n $ 之后仍然不满足条件,即为无解,输出Failed即可。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define TP template<typename T>
#define TP_ template<typename T,typename ... T_>
TP void read(T &x)
{
	x=0;int f=1;char ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<1)+(x<<3)+(ch^48);
	x*=f;
}
TP_ void read(T &x,T_&...y){read(x);read(y...);}
TP void write(T x){if(x<0){putchar('-'),x=-x;}if(x>9)write(x/10);putchar(48+x%10);}
TP void writeln(T &x){write(x);puts("");}
TP void writesp(T &x){write(x);putchar(' ');}
TP_ void writeln(const T &x,T_ &...y){writesp(x);writeln(y...);}
typedef long long LL;
constexpr int N=1e6+5;
constexpr int inf=1e9;
LL s[N<<1];
LL d[N<<1];
int l,r,q[N<<1];
int main()
{
	int T;read(T);
	while(T--)
	{
		int n;read(n);
		for(int i=1,x;i<=n;i++)
			read(x),d[i]=x;
		for(int i=1,x;i<=n;i++)
			read(x),d[i]-=x,d[i+n]=d[i];
		for(int i=1;i<=n*2;i++)//先处理为前缀和
			s[i]=s[i-1]+d[i];
		l=1;r=0;q[l]=0;
		for(int i=1;i<=n;i++)//将1~n的范围提前处理
		{
			while(l<=r&&s[q[r]]>=s[i])r--;
			q[++r]=i;
		}
		bool success=0;
		for(int i=1;i<=n;i++)
		{
			while(l<=r&&q[l]<i)l++;//使队列中始终只有i~i+n-1的范围
			if(s[q[l]]>=s[i-1])
			{
				writeln(i);//第一次满足条件即为最小的编号
				success=1;//记录是否有答案
				break;//直接跳出
			}
			while(l<=r&&s[q[r]]>=s[i+n])r--;
			q[++r]=i+n;
		}
		if(!success)puts("Failed!");//没答案就输出Falied
	}
	return 0;
}

标签:满足条件,ch,int,void,TP,writeln,回旋,加速器
From: https://www.cnblogs.com/lofty2007/p/17730212.html

相关文章

  • 成功入选 2023 谷歌出海创业加速器,Tapdata 乘势远航Tapdata Connector 实用指南:如何将
    9月6日,2023Google开发者大会的收官之行于上海拉开帷幕。会间,官方正式公布了最新一期谷歌出海创业加速器入营名单,Tapdata成功入选:长期以来,Google开发者大会为开发者提供了一个独一无二的学习和合作机会,这是一场汇聚全球创新者的聚会,鼓励创新思维。从中能够深入了解最新的......
  • 武汉星起航电子商务有限公司:亚马逊企业购产业带加速器正式启动  
    武汉星起航电子商务有限公司(以下简称“星起航”)是一家业内实力雄厚的亚马逊跨境电商孵化服务商。我们的使命是帮助中国卖家实现全球化梦想,将中国的制造业优势推广到全球市场。而在这个充满机遇的时刻,星起航积极响应了亚马逊的最新举措,为中国的传统工贸企业开启了一扇通向跨境电商的......
  • 软件开发原子化 技术转型加速器
    在万物互联的时代,人均持有设备量不断攀升,设备和场景的多样性,每个设备都需要独立开发一个应用,先安装后使用、不同设备的能力不兼容等传统应用的短板逐步暴露出来。在此背景下,应用提供方和用户都迫切需要一种新的服务提供方式,使应用开发更简单、服务的获取和使用更便捷,原子化服务也......
  • 软件开发原子化 技术转型加速器
    在万物互联的时代,人均持有设备量不断攀升,设备和场景的多样性,每个设备都需要独立开发一个应用,先安装后使用、不同设备的能力不兼容等传统应用的短板逐步暴露出来。在此背景下,应用提供方和用户都迫切需要一种新的服务提供方式,使应用开发更简单、服务的获取和使用更便捷,原子化服务也就......
  • 为中国优秀初创企业提供全方位支持,亚马逊云科技创业加速器公布入选名单
    生成式AI技术飞速发展,颠覆着人们的生活,正在掀起新一轮的科技革命。在生成式AI的浪潮中,亚马逊云科技旨在为中国的优秀初创企业提供全方位支持,助其抢占先机。 在6月底举办的亚马逊云科技中国峰会上,亚马逊云科技联合28家创投与产业机构共同推出“亚马逊云科技创业加速器”,该项目是亚......
  • 全球网络加速器GA和内容分发网络CDN,哪个更适合您的组织使用?
    对互联网用户来说,提供最佳的用户体验至关重要:网页加载时间过长、视频播放断断续续以及服务忽然中断等问题都足以在瞬间失去客户。因此可以帮助提高您的网站或APP提高加载性能的解决方案就至关重要:全球网络加速器和CDN就是其中的两种解决方案。由于这两种服务都有一个共同的目标(提高......
  • 华秋硬创联合安创加速器,加速和创新赋能技术驱动型创业者
      01大赛介绍中国硬件创新创客大赛始于2015年,由深圳华秋电子有限公司主办,至今已经成功举办八届,赛事范围覆盖华南、华东、华北三大地区,超10个省市区域。大赛影响了超过45万工程师群体,吸引了35000多名硬创先锋报名参加线上线下培训会,并成功聚集了400多家生态合作伙伴,与500多......
  • 免费拥有自己的 Github 资源加速器
    TurboHub是一个免费的Github资源加速下载站点,可以帮助你快速下载Github上的资源。其核心逻辑是通过AzureStaticWebApps服务和AzureFunctions服务,将Github上的资源通过中间服务器进行转发,从而实现加速下载的目的。由于每个使用Azure的用户都可以免费的额度部署A......
  • Socks5代理:跨界电商和游戏产业的爬虫利器与出海加速器
    随着跨界电商和游戏产业的迅猛发展,爬虫技术成为了促进竞争力和业务拓展的重要手段。Socks5代理作为一种高性能的网络代理技术,在跨界电商和游戏产业中发挥着关键作用。本文将深入探讨Socks5代理的特点与优势,以及它在爬虫应用和跨海出海中的重要作用,为企业实现技术创新与全球化发展提......
  • 通过UMA使用TVM优化硬件加速器
    MakingyourHardwareAcceleratorTVM-readywithUMA本文介绍UniversalModularAcceleratorInterface(UMA),UMA提供了易用的API将新的硬件加速器整合进TVM。展示如何使用UMA将硬件加速器整合进TVM,不过目前还没有一个最优的方案来解决这个问题,UMA目标在于提供一个稳定的Pytho......