CF2107F2.Cycling (Hard Version)

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是此问题的困难版本,和其他版本的区别是此版本中 1≤n≤1061\le n\le 10^6,且需要对每个前缀都求解。

Leo 骑车去见他的女朋友。在 Leo 的前面有 nn 名骑手,从前往后排在第 ii 名的骑手的灵活度为 aia_i。

Leo 将要加速超过前面的所有骑手,他可以执行以下两种操作:

  • 当他在骑手 ii 后面,骑手 i+1i+1 前面(或 i=ni=n)时,付出 aia_i 的代价超过骑手 ii,之后他将在骑手 ii 前面,骑手 i−1i-1 后面(如果 i>1i>1);
  • 使用他的超级力量交换 aia_i 和 aja_j,代价为 ∣i−j∣\vert i-j\vert。

请你找出超过所有 nn 名骑手的最小代价。

额外地,Leo 想知道对于每个 i(1≤i≤n)i(1\le i\le n),当只有骑手 1,2,⋯ ,i1,2,\cdots,i 存在时,他超过所有 ii 名骑手的最小代价。

输入格式

多组数据,第一行一个整数 t(1≤t≤104)t(1\le t\le 10^4),表示数据组数。

对于每组数据,第一行一个整数 n(1≤n≤106)n(1\le n\le 10^6)。
第二行 nn 个整数 a1,a2,⋯ ,an(1≤ai≤109)a_1,a_2,\cdots,a_n(1\le a_i\le 10^9)。

保证单个测试点中 ∑n≤106\sum n\le 10^6。

输出格式

对于每组数据,输出一行 nn 个整数,第 ii 个数表示只存在前 ii 个骑手时的答案。

输入输出样例

  • 输入#1

    4
    3
    1 2 4
    4
    1 1 1 1
    2
    1 2
    4
    4 1 3 2

    输出#1

    1 3 7
    1 2 3 4
    1 3
    4 3 6 8

说明/提示

样例解释

第一组数据中,当存在所有 nn 名骑手时,一组操作如下所示:

  • 交换 a2a_2 和 a3a_3,之后 a=(1,4,2)a=(1,4,2),代价为 11;
  • 超过第 33 名骑手,代价为 22;
  • 交换 a1a_1 和 a2a_2,a=(4,1,2)a=(4,1,2),代价为 11;
  • 超过第 22 名骑手,代价为 11;
  • 交换 a1a_1 和 a2a_2,a=(1,4,2)a=(1,4,2),代价为 11;
  • 超过第 11 名骑手,代价为 11。

总代价为 77。可以证明这是最小的代价。

第二组数据中,当存在所有 nn 名骑手时,如果一直执行“超过”操作,花费为 44。可以证明这是最小的代价。

By chenxi2009

输入解题思路,AI测评打分。不知道怎么写?

首页