Greatest Common Divisor

题目描述

出题人不喜欢数学,所以他决定把这个问题抛给你。
对于一个数组的连续的区间(l,r),如果min(al​,al+1​,...,ar​)=gcd(al​,al+1​,...,ar​),则称这个区间为好区间。

他将给你一个数组,该数组为一个排列,你需要求出数组中最长的好区间的长度。

min(al​,al+1​,...,ar​)表示区间(l,r)中的最大元素,gcd(al​,al+1​,...,ar​)表示区间(l,r)中所有元素的最大公因数。
一个长为n的排列是指一个包含n个元素的数组,其中从1到n每个整数都恰好出现一次。

特别的,规定区间的长度为1的min(ai​)等于ai​本身,区间的长度为1的gcd(ai​)等于ai​本身。

输入描述:
第一行包含一个整数T(1≤T≤104),代表样例数量。
接下来为T组样例。每组样例的第一行为一个整数n(1≤n≤5⋅1e5),表述数组的长度。
每组样例的第二行包含n个整数a1,a2,...,an(1≤ai≤1e9),表示他给你的数组。
保证所有样例的n的和不超过5*1e5

输出描述:

对于每个样例,输出一个整数ans表示最长的好区间的长度。

示例1

输入

复制

1
2
2 1

输出

复制

2
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int a[N];
int main(){
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i];
        cout<<n<<endl;
    }
    return 0;
}

这个题更扯淡:

上个Highest Common Factor已经说过了

一个区间内最大公约数最大的时候便是等于区间内最大的那个值,那么现在这个题的定义改变了

要求区间的最小值和区间最大公约数相等时为好区间。

而现在的数组又是一个排列就是从1到n每个整数都会出现一次,那么就意味着区间中一定会有1

的出现,

那么他们的最大公约数就一定是1而且最小值也一定是1

那么这个数组就一定是一个好区间,则最长的就是这个数组的长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值