http://acm.hdu.edu.cn/showproblem.php?pid=6098
给定一个a数组,问你得到b数组。
条件 b【i】=max a[j] i不能整除j
从大到小判断,判断j是不是i的倍数,如果不是的话,就是他了。
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
vector<int>v;
struct Node
{ int num;
int k;
};
Node a[maxn];
int b[maxn];
bool cmp2(Node a,Node b){
return a.num<b.num;
}
int main(){
int t;
int m;
scanf("%d",&t);
while(t--){
scanf("%d",&m);
v.clear();
for(int i=1;i<=m;i++){
scanf("%d",&a[i].num);
b[i]=a[i].num;
a[i].k=i;
}
sort(a+1,a+m+1,cmp2);
//cout<<a[m].num<<endl;
for(int i=2;i<=m;i++){
for(int j=m;j>=1;j--){
bool flag=false;
int sss=a[j].k;
int ttt=i;
if(sss%ttt!=0)
{
v.push_back(b[sss]);
break;}
}
}
for(int i=0;i<v.size();i++){
if(i==0)
printf("%d",v[i]);
else
printf(" %d",v[i]);
}
printf("\n");
}
return 0;
}