HDU 6098

/*
HDU 6098 - Inversion [ 贪心,数论 ]  |  2017 Multi-University Training Contest 6
题意:
	求出所有B[i] = max(A[j]) [j % i != 0]
分析:
	排个序从大到小找第一个不是它倍数的数.
	至多扫倍数的个数,均摊复杂度O(nlogn)
*/
#include <bits/stdc++.h>
using namespace std;
struct Node {
    int x, i;
};
bool cmp(Node a, Node b) {
    return a.x > b.x;
}
vector<Node> a;
int b[100005];
int t, n;
int main()
{
    scanf("%d", &t);
    while (t--)
    {
        a.clear();
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
        {
            int x; scanf("%d", &x);
            a.push_back(Node{x, i});
        }
        sort(a.begin(), a.end(), cmp);
        for (int i = 2; i <= n; i++)
        {
            for (auto& c : a)
            {
                if (c.i % i == 0) continue;
                b[i] = c.x;
                break;
            }
        }
        for (int i = 2; i < n; i++) printf("%d ", b[i]);
        printf("%d
", b[n]);
    }
}

  

原文地址:https://www.cnblogs.com/nicetomeetu/p/7345495.html