P7244-章节划分【RMQ,贪心,递归】

正题

题目链接:https://www.luogu.com.cn/problem/P7244?contestId=38911


题目大意

nnn个数字,分成连续非空的kkk段要求每一段的最大值的gcdgcdgcd最大。


解题思路

首先答案一定是最大值的约数,这些数不多我们可以枚举这些数xxx。然后我们称xxx的倍数的位置为关键点。

现在我们要求在选取的全都是关键点的情况下最多能够选取的关键点数量

我们先找出最大的数(第一次肯定是最大的那个数)然后如果这个数是xxx的倍数就递归左右两边把数量加起来。如果不是我们就比较这个点和区间的左右两边(一定是空的或者是关键点),如果一边比这个数要大就可以递归另一边(那一边的那个数区间延伸过来),如果两边都比这个数要大就取两边的最大值即可。

RMQRMQRMQ维护区间最大的位置即可

时间复杂度O(nlog⁡n+namax)O(n\log n+n\sqrt {a_{max}})O(nlogn+namax)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10,T=20;
int n,m,a[N],f[N][T],lg[N],ans;
int rmq(int l,int r){int z=lg[r-l+1];return (a[f[l][z]]>a[f[r+1-(1<<z)][z]])?f[l][z]:f[r+1-(1<<z)][z];
}
int calc(int l,int r,int pl,int pr,int x){if(l>r)return 0;int k=rmq(l,r),tmp=0;if(a[k]%x==0)return calc(l,k-1,pl,a[k],x)+calc(k+1,r,a[k],pr,x)+1;if(a[k]<pr)tmp=max(tmp,calc(l,k-1,pl,pr,x));if(a[k]<pl)tmp=max(tmp,calc(k+1,r,pl,pr,x));if(a[k]>pl&&a[k]>pr)return -1e9;return tmp;
}
void solve(int x){int k=rmq(1,n);if(calc(1,k-1,0,a[k],x)+calc(k+1,n,a[k],0,x)+1>=m)ans=max(ans,x);return;
}
int main()
{scanf("%d%d",&n,&m);int w=0;lg[0]=-1;for(int i=1;i<=n;i++){scanf("%d",&a[i]);w=max(w,a[i]);f[i][0]=i;lg[i]=lg[i/2]+1;}for(int j=1;(1<<j)<=n;j++)for(int i=1;i+(1<<j)-1<=n;i++){if(a[f[i][j-1]]>a[f[i+(1<<j-1)][j-1]])f[i][j]=f[i][j-1];else f[i][j]=f[i+(1<<j-1)][j-1];}for(int i=1;i*i<=w;i++){if(w%i==0){solve(i);if(i*i!=w)solve(w/i);}}printf("%d\n",ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[XSY3382] 专家系统(二分+线段树)

XSY3382 二分ccc&#xff0c;问题变成能否用一个长ccc宽ccc的矩形框住至少kkk个点。 二维数点问题考虑用扫描线解决。将所有点按照xxx从小到大排序。 枚举一段xxx坐标相差不超过ccc的点&#xff08;双指针推进&#xff09;&#xff0c;初始想法是根据这些点的yyy值建一棵权值…

关于.NET Core是否应该支持WCF Hosting的争论

本文要点本文试图回答“.NET Core 是否应该支持 Windows 通信基础&#xff08;WCF&#xff09; Hosting&#xff1f;”的问题&#xff1b;支持者论据&#xff1a;许多工程师喜欢把 WCF 作为一种编程模型&#xff0c;不希望因为迁移到 .NET Core 而产生&#xff08;机会成本&…

战争尾声(nowcoder 215073)

战争尾声 nowcoder 215073 题目大意 在平面直角坐标系&#xff08;x,y范围均为1~200&#xff09;上&#xff0c;给你n个点&#xff0c;让你找到一个点&#xff0c;使其到所有点直线距离相等&#xff08;答案坐标均为整数&#xff09; 输入样例#1 2 1 2 2 1输出样例#1 1 1…

HDU1269 迷宫城堡(模板题)

HDU1269 迷宫城堡 文章目录Problem Description题解&#xff1a;Problem Description 为了训练小希的方向感&#xff0c;Gardon建立了一座大城堡&#xff0c;里面有N个房间(N<10000)和M条通道(M<100000)&#xff0c;每个通道都是单向的&#xff0c;就是说若称某通道连通…

照看小猫(nowcoder 217602)

照看小猫 nowcoder 217602 题目大意 有n只小猫&#xff0c;对于第i只小猫&#xff0c;给它取一个以小写字母组成的名字&#xff08;长度不大于aia_iai​&#xff09;&#xff0c;问你使所有小猫名字不同的方案数 样例#1 输入样例#1 1 1输出样例#1 26样例解释#1 猫咪的名…

AT3955-[AGC023D]Go Home【结论,递归】

正题 题目链接:https://www.luogu.com.cn/problem/AT3955 题目大意 nnn个房子在一个坐标轴上&#xff0c;第iii个有pip_ipi​个人在位置xix_ixi​&#xff0c;开始所有人都在一辆在位置sss的车上&#xff0c;每一时刻&#xff0c;每个人都会投票决定车的走向&#xff0c;票多的…

[XSY3383]多线程(笛卡尔树,DP)

%%%tjytjytjy的笛卡尔树做法&#xff1a; 设dp(l,r,Amin,Bmin)dp(l,r,Amin,Bmin)dp(l,r,Amin,Bmin)为把c[l],c[l1],...,c[r]c[l],c[l1],...,c[r]c[l],c[l1],...,c[r]划到A,BA,BA,B两线程中&#xff0c;且划到AAA线程的数>Amin>Amin>Amin&#xff0c;划到BBB线程的数&…

ASP.NET Core 2.0使用Autofac实现IOC依赖注入竟然能如此的优雅简便

初识ASP.NET Core的小伙伴一定会发现&#xff0c;其几乎所有的项目依赖都是通过依赖注入方式进行链式串通的。这是因为其使用了依赖注入 (DI) 的软件设计模式&#xff0c;代码的设计是遵循着“高内聚、低耦合”的原则&#xff0c;使得各个类与类之间的关系依赖于接口&#xff0…

POJ1236 Network of Schools

POJ1236 Network of Schools 文章目录Description题意&#xff1a;题解&#xff1a;代码&#xff1a;Description A number of schools are connected to a computer network. Agreements have been developed among those schools: each school maintains a list of schools t…

【模拟】签订协议(nowcoder 217601)

签订协议 nowcoder 217601 题目大意 给出n个数&#xff0c;现在有一个协议书&#xff0c;让你从1传到n&#xff0c;然后传回1&#xff0c;继续传下去 对于第i个数&#xff0c;如果前面i-1个数已经匹配过了&#xff0c;那么当协议书传过来时即可匹配&#xff0c;否则无法匹配…

P4196-[CQOI2006]凸多边形/[模板]半平面交【计算几何】

正题 题目链接:https://www.luogu.com.cn/problem/P4196 题目大意 给出nnn个凸多边形&#xff0c;求它们交的面积。 解题思路 就是把凸多边形上每条边作为一个半平面限制然后求一遍半平面交就好了。 具体做法是我们先将点按照级角排序&#xff0c;然后以此把半平面加入双端…

连续段问题小结

一个好用的工具——析合树 oi-wiki 例题 CF526F 题意&#xff1a; 给出一个1~nnn的排列&#xff0c;问有多少个区间的值域是连续的。 题解&#xff1a; 线段树单调栈做法 分治做法 析合树做法 图论做法 CF997E 题意&#xff1a; 给出一个1~nnn的排列&#xff0c;有qqq次…

实战中的asp.net core结合Consul集群Docker实现服务治理

一、前言在写这篇文章之前&#xff0c;我看了很多关于consul的服务治理&#xff0c;但发现基本上都是直接在powershell或者以命令工具的方式在服务器上面直接输入consul agent .... 来搭建启动consul集群&#xff0c;一旦把命令工具关掉&#xff0c;则consul无法再后台启动&…

POJ3177 Redundant Paths

POJ3177 Redundant Paths 文章目录Description题意&#xff1a;题解&#xff1a;代码&#xff1a;Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21945 Accepted: 9056Description In order to get from one of the F (1 < F < 5,000) grazing fields (…

【最小生成树】路线规划(nowcoder 217603)

路线规划 nowcoder 217603 题目大意 给一个无向连通图&#xff0c;问你在经过的边最少的前提下&#xff0c;从1走过所有点&#xff0c;再走回1的最短距离 样例#1 输入样例#1 5 5 5 4 3 4 3 5 2 3 7 1 2 4 2 4 1输出样例#1 26样例解释#1 最少时间的路径: 1 →2 →…

计算几何学习小记

文章目录前言正题平面运算加减乘积常见问题直线/线段规范交点求垂线/点问题判断点在多边形的内/外求两个圆的交点前言 因为懒得画图理解计算几何所以要来这里鼓励一下自己 以后新学的应该也会写在这里。就当我是水博客 应该都是二维的计算几何&#xff0c;三维的有生之年再学 …

[XSY3343] 程序锁(DP)

XSY3343 先考虑如何判定一个填好的序列会不会gg&#xff1a; 若∃p,q,使s′[p1]t′[q1]−1\exist p,q,使s[p1]t[q1]-1∃p,q,使s′[p1]t′[q1]−1且∑i1ps′[i]∑j1qt′[j]≤0\sum_{i1}^{p}s[i]\sum_{j1}^{q}t[j]\leq 0∑i1p​s′[i]∑j1q​t′[j]≤0&#xff0c;则这个序列必g…

Asp.Net Core SignalR 用泛型Hub优雅的调用前端方法及传参

继续学习最近一直在使用Asp.Net Core SignalR(下面成SignalR Core)为小程序提供websocket支持,前端时间也发了一个学习笔记&#xff0c;在使用过程中稍微看了下它的源码,不得不说微软现在真的强大,很多事情都帮你考虑到了,比如使用Redis,使用Redis后,你的websocket就支持横向扩…

Network POJ-3694

Network POJ-3694 文章目录Description题意&#xff1a;样例分析&#xff1a;题解&#xff1a;代码&#xff1a;Description A network administrator manages a large network. The network consists of N computers and M links between pairs of computers. Any pair of com…

【树状数组】递增子序列(金牌导航 数据结构优化DP-1)

递增子序列 金牌导航 数据结构优化DP-1 题目大意 给出一个序列&#xff0c;让你求长度为m的单调递增子序列的个数 输入样例 3 2 1 1 2 7 3 1 7 3 5 9 4 8输出样例 2 12数据范围 1⩽n⩽104,1⩽m⩽100,0⩽ai⩽9876543211\leqslant n \leqslant 10^4,1\leqslant m \leqslant…