题目描述
小睿睿给了你一个长度为n的数列,他想问你该数列中满足条件(区间内存在某个数是区间内所有数的公因数)的最长区间有多少个
思路:假设当前这个数为公因数,然后向前向后搜,搜过的点不可能存在更长的符合条件的区间了就不用搜了,所以复杂度不高。
代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int a[2000005];
int vis[2000005];
int len[2000005];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
for(int i=0;i<n;i++){
if(vis[i])continue;
int j=i-1,cnt=1;
while(j>=0){
if(a[j]>=a[i]&&(a[j]%a[i]==0||a[j]==a[i]))
j--,cnt++;
else break;
}
j=i+1;
while(j<n){
if(a[j]>=a[i]&&(a[j]%a[i]==0||a[j]==a[i]))
cnt++,vis[j]=1,j++;
else break;
}
len[cnt]++;
//printf("%d %d \n",i,cnt);
}
for(int i=n;i>=0;i--){
if(len[i]){
printf("%d\n",len[i]);
break;
}
}
return 0;
}



京公网安备 11010502036488号