题目大意:

给你一个数组 a ,让你求出数组 b 。b[ i ] 表示 a 数组中下标不能被 i 整除的数里面的最大值。

分析:

可能是一个比较投机取巧的方法吧,首先取出 a 数组里的最大值 a[ j ] ,那么 b 数组里,除了下标为 j 的因子的数以外,其他数的值都是 a[ j ] ,然后因为 j 的因子个数不多,我一个一个确认应该也不慢。

代码:

#include<bits/stdc++.h>
#define maxn 100050
using namespace std;

int test=0;
int n,a[maxn],b[maxn];

int main()
{
    scanf("%d",&test);
    while(test--)
    {
        int maxv=0,max_num=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            if(maxv<a[i])
            {
                maxv=a[i];
                max_num=i;
            }
        }
        for(int i=2;i<=n;i++)
        {
            if(max_num%i==0)
            {
                int max_t=0;
                for(int j=1;j<=n;j++)
                {
                    if(j%i==0)continue;
                    if(max_t<a[j])
                    {
                        max_t=a[j];
                    }
                }
                b[i]=max_t;
            }
            else
            {
                b[i]=maxv;
            }
        }
        printf("%d",b[2]);
        for(int i=3;i<=n;i++)
        {
            printf(" %d",b[i]);
        }
        printf("\n");

    }
}