题意:给你一个长度为n的数列ai,然后找出最大的r-l,r代表右下标,l代表左下标,条件是l<=j<=r,al..ar都被aj整除。
思路:遍历,使用left和right定位左右区间大小。
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define INF 0x3f3f3f3f
int a[300005],b[300005];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int length=0,num=0;
for(int i=1;i<=n;)
{
int left=i,right=i;
while(left>=1&&a[left]%a[i]==0)
{
left--;
}
while(right<=n&&a[right]%a[i]==0)
{
right++;
}
i=right;
if(right-left-2>length)
num=0,length=(right-left-2);
if(right-left-2==length)
b[num++]=left+1;
}
//sort(b,b+num);
printf("%d %d\n",num,length);
for(int i=0;i<num-1;i++)
{
printf("%d ",b[i]);
}
printf("%d\n",b[num-1]);
}