題意:給你一個長度爲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]);
}