题目链接
题目大意
给定数组
A
[] (
T≤20,Ai≤109,∑n≤700000
分析
如果求每个
Bi
,我们都要去扫描一遍
A
数组的话,那O(
如果我们找出
时间复杂度
代码
#include <iostream>
#include <cstdio>
#include <cmath>
const int MAXN=100010;
using namespace std;
int a[MAXN],b[MAXN],p[MAXN];
int main()
{
int T,max_val,max_num,cnt,n,i,j,temp;
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
max_val=0;
for (i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if (a[i]>max_val)
{
max_val=a[i];
max_num=i;
}
}
/**求最大数对应下标的因子*/
cnt=0;
for (i=1;i<=sqrt(max_num);i++)
{
if (max_num%i==0)
{
p[++cnt]=i;
p[++cnt]=max_num/i;
}
}
for (i=2;i<=n;i++)
b[i]=max_val;
for (i=1;i<=cnt;i++)
{
temp=0;
for (j=1;j<=n;j++)
if (j<p[i]||j%p[i]!=0)
temp=max(temp,a[j]);
b[p[i]]=temp;
}
for (i=2;i<n;i++)
printf("%d ",b[i]);
printf("%d\n",b[n]);
}
return 0;
}