Inversion
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 602 Accepted Submission(s): 401
Now we want to know Bi=maxi∤jAj , i≥2.
Each case begins with one line with one integer n : the size of array A.
Next one line contains n integers, separated by space, ith number is Ai.
Limits
T≤20
2≤n≤100000
1≤Ai≤1000000000
∑n≤700000
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
#define N 100010
#define LL long long
LL a[N];
LL b[N];
int main()
{
int t;
LL n;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
scanf("%lld",&n);
LL maxa=0;
LL maxa_i=0;
for(int i=1; i<=n; i++)
{
scanf("%lld",&a[i]);
if(a[i]>maxa)
{
maxa=a[i];
maxa_i=i;
}
}
//int maxx;
for(int i=2;i<=n+1;i++)
{
if(maxa_i%i==0)
{
LL mm=0;
for(int j=1;j<=n;j++)
{
if(j%i==0)continue;
if(a[j]>mm)
{
mm=a[j];
}
}
b[i]=mm;
}
else
b[i]=maxa;
}
for(int i=2;i<n;i++)
{
cout<<b[i]<<' ';
}
cout<<b[n]<<endl;
}
return 0;
}