首页 > 其他分享 >CF1873F Money Trees

CF1873F Money Trees

时间:2023-10-01 10:34:32浏览次数:29  
标签:Money mid long 合法 Trees 端点 ans rm CF1873F

思路

要求最长长度,想到可以二分答案。

那么现在需要考虑如何快速验证答案是否正确。

可以 \(O(n)\) 枚举区间左端点,因为有了长度,所以可以直接获得右端点的值,直接验证右端点是否合法。

因为要求区间的每个数都是右边的数的倍数,所以可以提前预处理每个点最远的满足这个条件的右端点,直接判断合不合法。

还要求和要小于某个值,这个直接前缀和预处理即可。

AC code

// LUOGU_RID: 126800277
#include<bits/stdc++.h>
using namespace std;
long long T,n,k,a[200005],h[200005],l,r,mid,ans,rm[200005];
inline bool check(long long x)
{
	for(long long i=1;i<=n-x+1;++i) if(a[i+x-1]-a[i-1]<=k&&rm[i]>=i+x-1) return 1;//合法
	return 0;//没有合法的
}
int main()
{
	scanf("%lld",&T);
	while(T--)
	{
		scanf("%lld%lld",&n,&k);
		for(long long i=1;i<=n;++i) scanf("%lld",&a[i]),a[i]+=a[i-1];//前缀和预处理
		for(long long i=1;i<=n;++i) scanf("%lld",&h[i]);
		rm[n]=n;
		for(long long i=n-1;i>=1;--i)
			if(h[i]%h[i+1]==0) rm[i]=rm[i+1];
			else rm[i]=i;//预处理最远达到的合法右端点(仅满足整除条件)
		l=0,r=n;//二分
		while(l<=r)
		{
			mid=l+r>>1;
			if(check(mid)) ans=mid,l=mid+1;
			else r=mid-1;
		}
		printf("%lld\n",ans);
	}
} 

标签:Money,mid,long,合法,Trees,端点,ans,rm,CF1873F
From: https://www.cnblogs.com/One-JuRuo/p/17738633.html

相关文章

  • 你知道Vue 3.0中Treeshaking特性吗?
    介绍Vue3.0引入了Tree-shaking特性,旨在优化构建过程并减小最终生成的代码大小。Tree-shaking是一种在构建时移除未使用代码的技术,通过分析模块的依赖关系,将没有被引用的部分从最终的打包文件中排除掉。这可以大大减少应用的体积,提高性能。举个通俗一点的例子:当我们开发一个应用程......
  • 【Java 基础篇】Java TreeSet 详解:红黑树实现的有序集合
    Java集合框架提供了多种数据结构,用于存储和操作数据。其中,TreeSet是一种特殊类型的集合,它通过红黑树(Red-BlackTree)数据结构实现了有序的、唯一元素存储。本篇博客将深入探讨TreeSet,包括其概念、特性、内部实现、使用方法以及示例代码。无论您是初学者还是有一定经验的Java开......
  • CF1873F
    二分+前缀和。要求使得区间和小于\(k\)的子区间长度,显然可以二分处理。二分区间长度,枚举区间左端点,check两项内容:区间是否合法(符合\(h_i\modh_{i+1}=0\)),区间和是否小于\(k\)。对于当前区间长度,只要有一个区间满足条件,即返回真。区间和可以通过前缀和\(O(1)\)的计算,而......
  • money详细日志分析--转
    一、Monkey日志详解Monkey日志由以下几部分组成:(1)测试命令信息:随机种子seed、运行次数、可运行应用列表、各事件百分比。​​​​​​​ (2)App切换和Activity跳转:可以看到切换到了哪个App,从哪个Activity跳转到了哪个Activity,如果发生了异常,就可以看出是在哪个A......
  • 【题解】CF1830A Copil Copac Draws Trees
    你考虑对于每一条边打上时间标记,然后在树上DFS的时候维护一下以\(u\)为根的答案即可,然后将答案合并,反正很简单,看代码就懂。code:#include<bits/stdc++.h>usingnamespacestd;constintNN=2e5+8;intt,n;structEdge{ intto,next,val;}edge[NN<<1];inthead[......
  • 2023.9.3 hpz's problems about trees
    P2664树上游戏对于颜色\(c\),如果我们把颜色\(c\)的点全部都删除,那么我们会得到若干个连通块。连通块里面的路径是没有贡献的,连通块联通外面的路径都会有这个颜色做了贡献。对于一个连通块,其里面所有点都能有\(n-siz(连通块)\)的贡献。如果我们每次枚举颜色,再计算连通块,......
  • VUE中的 TreeSelect使用
    vue-treeselect的组件使用 一先通过npm安装vue-treeselectnpmintall--save@riophae/vue-treeselect  二页面中引入,声明组件 三页面使用 然后动态绑定data(数据) 这个Id和Label还有children都是可以修改的但是注意!一定要和后端定义的值对的上!最终效果......
  • 监督学习算法中梯度提升决策树(Gradient Boosting Decision Trees)
    梯度提升决策树(GradientBoostingDecisionTrees,简称GBDT)是一种监督学习算法,它是以决策树为基础分类器的集成学习方法。GBDT通过迭代地训练多个弱分类器(决策树),每个弱分类器都在前一个弱分类器的残差上进行训练,从而逐步减小残差,最终将多个弱分类器组合成一个强分类器。具体而言,GB......
  • CF1858D Trees and Segments
    一道考查预处理技巧的dp。观察式子\(a\timesL_0+L_1\),一个显然的想法是“定一求一”,即预处理求出对于每个\(L_1\)最大的\(L_0\),然后对于每个\(a\),枚举\(L_1\),统计最大的\(a\timesL_0+L_1\)。这样,我们将问题转化为了:已知\(L_1=len\),求出\(dp_{len}=L_{0max}\)。dp数......
  • vue-treeselect 树下拉组件被遮挡问题
    vue-treeselect组件官方中文网站: https://www.vue-treeselect.cn/需求背景:在el-tabs内容中添加此组件出现被遮挡问题通过文档查询解决方法<treeselectv-model="params.wardIds":options="hospitalWardTree"value-consists-of="LEAF_PRIORITY"placeholder=......