Hdu6098 Inversion(2017多校第6场)

来源:互联网 发布:义乌淘宝美工学校 编辑:程序博客网 时间:2024/05/17 08:52

Inversion

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 271    Accepted Submission(s): 183


Problem Description
Give an array A, the index starts from 1.
Now we want to know Bi=maxijAj , i2.
 

Input
The first line of the input gives the number of test cases T; T test cases follow.
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
T20
2n100000
1Ai1000000000
n700000
 

Output
For each test case output one line contains n-1 integers, separated by space, ith number is Bi+1.
 

Sample Input
241 2 3 441 4 2 3
 

Sample Output
3 4 32 4 4
 

Source
2017 Multi-University Training Contest - Team 6

——————————————————————————————————
题目的意思是给出一个序列,求2~n每一个数,下标不是这个数倍数的最大值是什么?
思路:从大到小排个序,然后枚举判下表是否为这个数的倍数
#include <iostream>#include <cstdio>#include <cstring>#include <map>#include <set>#include <string>#include <cmath>#include <algorithm>#include <vector>#include <bitset>#include <stack>#include <queue>#include <unordered_map>#include <functional>using namespace std;struct node{int id,v;}a[100005];bool cmp(node x,node y){    return x.v>y.v;}int main(){    int T,n;    for(scanf("%d",&T);T--;)    {        scanf("%d",&n);        for(int i=1;i<=n;i++)            scanf("%d",&a[i].v),a[i].id=i;        sort(a+1,a+1+n,cmp);        int q=0;        for(int i=2;i<=n;i++)        {            int k=1;            while(a[k].id%i==0)            {               k++;            }            if(q++)                printf(" ");            printf("%d",a[k].v);        }        printf("\n");    }    return 0;}