首页 > 其他分享 >Magical GCD UVA - 1642

Magical GCD UVA - 1642

时间:2023-04-10 18:35:35浏览次数:56  
标签:tes gcd 1642 int Magical tot sov UVA include

 对序列A,  求 (j-i+1) * gcd( i, i+1, ... j ) 最大值

 

G(i) =gcd( G[i-1] ,a[i] )  即前缀值不升

维护 1~j-1 可能的 i  值 (logn 个)

 

O(n *log^2

#include <iostream>
#include <map>
#include <cmath>
#include <algorithm>
using namespace std ; 
const int N =1e5+30;
#define int long long
 int n,a[N];
 int v[100],id[100],tot ;
 
 int gcd(int x,int y){
 	return y==0?x:gcd(y,x%y);
 }
 int max(int x,int y){
 	return x>y?x:y;
 }
 void sov(){
 	tot=0;
    int i,j,k,ans=0;
    cin>>n;
    for(i=1;i<=n;++i) cin>>a[i];
    
    for(i=1;i<=n;++i){
	    ans=max(ans,a[i]);
	    
	    for(j=1;j<=tot;j++){
	    	v[j]=gcd(v[j],a[i]);
	    	if(v[j]==v[j-1]){
		    	for(k=j;k<tot;k++){
		    		v[k]=v[k+1],id[k]=id[k+1];
		    	}
		    	tot--,j--;
	    	}
	    	else
	    		ans=max(ans,v[j]*(i-id[j]+1));
	    }
	    v[++tot]=a[i]; id[tot]=i;
    }
    cout << ans<<endl;
    
 }
 signed main(){
 	int tes;
 	cin>>tes;
 	while(tes--) sov();
 }
 
 
 

 

标签:tes,gcd,1642,int,Magical,tot,sov,UVA,include
From: https://www.cnblogs.com/towboa/p/17303913.html

相关文章

  • Lighting System Design uva11400
    设计一个照明系统,一共有n(n<=1000)种灯泡可供选择,不同种类的灯泡必须用不同的电源,同一种灯泡则可以用一个,输入为一个n,以下n行,每行四个数值,代表电压V,电源费用K,每个灯泡费用C,所需灯泡数量L。n=0为结束标志。为了省钱,你可以把一些灯泡换成电压更高的以节省电源的钱,但不能换成更低的,......
  • 糖果 Candy uva1639
    有两个盒子各有n(n<=2e5)个糖,每天随机选一个(概率分别为p,1-p),然后吃一颗糖。直到有一天,没糖了!输入n,p,求此时另一个盒子里糖的个数的数学期望   假设最后某个盒子有k颗糖,然后计算概率即可 #include<iostream>#include<cstring>#include<algorithm>#include<cmath>u......
  • Crossing Rivers uva12230
    https://www.luogu.com.cn/problem/UVA12230期望的线性性质设初始答案A,为全走陆地的时间D,则每次输入时去河的长度L,加上渡河期望时间2*L/v#include<iostream>#include<cstring>#include<algorithm>#include<set>usingnamespacestd;intn,D;signedmain(){ in......
  • Pole Arrangement uva1638
    有高度分别为1到n的n根杆子排成一行。如果你从左侧或右侧看这些杆,较小的杆被较高的杆遮挡。给出杆子的数量n,从左能看到的杆子数量L,从右能看到的杆子数量R,求杆子有多少种排列方式  考虑高度1~n的柱子,把高度1的插入2~i的某个排列中转移f[i][j][k]=f[i-1][j-1][k]+f[i-......
  • 比赛名次 Race uva12034
    两人赛马,最终名次有3种可能求n人赛马时最终名次的可能性的个数#include<iostream>#include<cstring>#include<algorithm>#include<set>usingnamespacestd;#definemod10056intc[1002][1002],n,f[1002];voidinit_c(){ inti,j; c[1][1]=1; for(i=0;i<......
  • Critical Mass uva 580
     #include<iostream>#include<cstring>#include<algorithm>#include<set>usingnamespacestd;intf[44],n;signedmain(){ inti; f[3]=1,f[4]=3; for(i=5;i<=30;i++){ f[i]=f[i-1]*2+(1<<(i-4))-f[i-4]; } int......
  • Headshot UVA - 1636
     #include<iostream>#include<vector>#include<cstring>#include<algorithm>usingnamespacestd;constintN=104;strings;voidsov(){ inti; intlen=s.size();s+=s; inta=0,b=0; for(i=0;i<=len;i++){ if(......
  • UVA - 562 Dividing coins 经典01背包
    题目大意:给出一系列硬币,要求分给两个人,且两个人得到的硬币差达到最小值解题思路:用d[i]表示i这个数是否能被表示,则如果d[i-num[j]]==1的话,num[j]表示硬币的价值,则d[i]就可以被表示,最后只要判断sum>>1然后递减到0的期间遇到哪个数字能表示的,能表示的话就找到结果了,结果为sum-2*i,具体......
  • UVA - 10003 Cutting Sticks 区间DP
    题目大意:给出一根木棒长l,上面有k个点,要求从这些点切割,每次切割的代价是当前要切割的木棒的长度,求最小的代价解题思路:区间DP:区间动态规划问题一般都是考虑,对于每段区间,他们的最优值都是由几段更小区间的最优值得到,是分治思想的一种应用,将一个区间问题不断划分为更小的区间直至一个......
  • UVA - 10131 Is Bigger Smarter? 最长上升子序列
    题目大意:给出一系列大象的体重和IQ的数据,要求找出最长的一串,符合大象1的体重大于大象2,而IQ却小于大象2解题思路:设置一个状态量,d[i],表示以第i只大象为终点的符合条件的最大值,则如果符合大象i的体重大于大象j的体重,但IQ却反之且d[i] <d[j]+1,那么d[i] =d[j]+1#include<cst......