Inversion Posted on 2019-06-30 | In acm , 做题记录 , 2017杭电多校赛 题目链接题意计算 Code123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#include<bits/stdc++.h>using namespace std;typedef long long ll;#ifndef ONLINE_JUDGE#define dbg(x...) do{cout << "\033[33;1m" << #x << "->" ; err(x);} while (0)void err(){cout << "\033[39;0m" << endl;}template<template<typename...> class T, typename t, typename... A>void err(T<t> a, A... x){for (auto v: a) cout << v << ' '; err(x...);}template<typename T, typename... A>void err(T a, A... x){cout << a << ' '; err(x...);}#else#define dbg(...)#endif#define inf 1ll << 50const int N = 1e5 + 5;int lcy[N][20];int a[N];void rmq_pre(int n){ for (int i = 1; i <= n; i++) lcy[i][0] = a[i]; for (int j = 1; (1 << j) <= n; j++) for (int i = 1; i + (1 << j) <= n + 1; i++) { lcy[i][j] = max(lcy[i][j - 1], lcy[i + (1 << (j - 1))][j - 1]); }}int rmq(int l, int r){ int k = 31 - __builtin_clz(r - l + 1);// dbg(l, k, r - (1 << k) + 1, 1 << k); return max(lcy[l][k], lcy[r - (1 << k) + 1][k]);}int main(){ int n, T; scanf("%d", &T); while (T--) { scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); rmq_pre(n); for (int i = 2; i <= n; i++) { int tmp = 0; for (int l = 0, r = i; l < n; l = r, r += i) { //dbg(l, r); tmp = max(tmp, rmq(l + 1, min(r - 1, n))); } printf("%d%c", tmp, i == n? '\n' : ' '); } // dbg(rmq(4, 5), lcy[4][1]); } return 0;}