牛客挑战赛42 A.小睿睿的数列

牛客挑战赛42 A.小睿睿的数列

题目链接

题目描述

小睿睿给了你一个长度为n的数列,他想问你该数列中满足条件(区间内存在某个数是区间内所有数的公因数)的最长区间有多少个

输入描述:

第一行 1 1 1 个整数 n n n,表示数列的长度
第二行 n n n 个正整数,第 i i i 个整数表示数列 a i a_i ai

输出描述:

一行1个整数,表示答案

示例1

输入

5
1 1 1 1 1

输出

1

示例2

输入

5
2 4 7 11 22

输出

2

典型的双指针题,对每个位置的 i i i,用一个指针向左,一个指针向右找最长的区间即可,AC代码如下:

#include
using namespace std;
typedef long long ll;
const int N=2e6+5;
int l,r,n,mx=0,ans=0,a[N];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=n;i=r){
        for(r=i+1;r<=n&&a[r]%a[i]==0;r++);
        for(l=i-1;l>=1&&a[l]%a[i]==0;l--);
        if(mx<r-l-1) ans=1,mx=r-l-1;
        else if(mx==r-l-1) ans++;
    }
    printf("%d",ans);
}

你可能感兴趣的:(双指针,牛客)