#future2018careera. [future2018career_a]増減ソート

[future2018career_a]増減ソート

问题文

给定长度为 N=30000N = 30000 的数列 AAAA 中包含从 11NN 的整数,每个数值恰好出现一次。现在,你需要进行以下操作 KK 次:

  • 指定整数 $i, j, k, l, v (1 ≦ i ≦ j ≦ N, 1 ≦ k ≦ l ≦ N, 0 ≦ v ≦ N - 1)$。将 Ai,Ai+1,...,AjA_i, A_{i+1}, ... , A_{j} 的值分别减少 vv,将 Ak,Ak+1,...,AlA_k, A_{k+1}, ... , A_{l} 的值分别增加 vv
  • 注意,AA 的所有元素必须始终是 11NN 之间的整数。允许出现相同的数值。
  • 另外,区间 \[i, j\] 和区间 \[k, l\] 不能重叠,并且两个区间的长度必须相等。

你需要输出一系列操作步骤,使得通过这些操作,尽可能接近 AA 中每个元素的目标值 A1=1A_1 = 1, A2=2A_2 = 2, ... , AN=NA_N = N。输出的操作步骤应该使得值 A11+A22++ANN|A_1 - 1| + |A_2 - 2| + … + |A_N - N| 尽可能小。

约束条件

  • N=30000N = 30000
  • 1000K30001000 ≦ K ≦ 3000
  • 给定的 AA11NN 的整数的随机排列。

输入

输入以以下格式给出。

NN KK A1A_1 A2A_2 :: ANA_N

输出

输出 KK 次操作,具体格式如下。

i1i_1 j1j_1 k1k_1 l1l_1 v1v_1 i2i_2 j2j_2 k2k_2 l2l_2 v2v_2 :: iKi_K jKj_K kKk_K lKl_K vKv_K

这里,对于任意的 tt,需要满足 itjti_t≦j_tktltk_t≦l_tjtit=ltktj_t - i_t = l_t - k_t


评分方法

对于每个测试用例,根据生成的数列 AA,得分为 $1,000,000,000 - |A_1 - 1| - |A_2 - 2| - … - |A_N - N|$。

共有 4141 个测试用例。对于每个测试用例,K=1000,1050,1100,,2950,3000K = 1000, 1050, 1100, …, 2950, 3000。所有测试用例的得分之和将作为最终得分。

注意,如果输出格式错误,则除了 example_01 以外的得分都将为 00

示例输入0

10 3
8
9
1
4
6
7
3
2
10
5
  • 这个输入不符合约束条件。

示例输出0


1 2 7 8 6
7 7 5 5 4
5 5 10 10 5  
  • 初始状态为 8,9,1,4,6,7,3,2,10,5{8,9,1,4,6,7,3,2,10,5}。经过以下变化:
  • 2,3,1,4,6,7,9,8,10,5{2,3,1,4,6,7,9,8,10,5}
  • 2,3,1,4,10,7,5,8,10,5{2,3,1,4,10,7,5,8,10,5}
  • 2,3,1,4,5,7,5,8,10,10{2,3,1,4,5,7,5,8,10,10}

示例输入1

点击此处下载输入文件示例(zip)

评分结果中的 "example_01" 数据与此处相同。该数据也将作为评分目标。注意,example_01 的 K=2000K=2000