A - 増減ソート Editorial

Time Limit: 5 sec / Memory Limit: 1024 MB

配点 : 4100000000041000000000

問題文

長さ N=30000N = 30000 の数列 AA が与えられます。AA には 11 から NN までの整数が 11 回ずつ現れます。ここから、あなたは以下の操作を KK 回行います。

  • 整数 i,j,k,l,v(1ijN,1klN,0vN1)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 のすべての要素は常に 11 以上 NN 以下でなければならない。同じ値が複数出現することは許される。
  • また、区間 [i,j][i, j] と区間 [k,l][k, l] に重複があってはならず、22 つの区間の長さは等しくなければならない。

あなたは、この操作により、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
  • 与えられる AA11 から NN までの整数のランダムな順列である。

入力

入力は以下の形式で与えられる。

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_t かつ ktltk_t≦l_t かつ jtit=ltktj_t - i_t = l_t - k_t を満たす必要がある。


採点方法

11 つのテストケースに対する点数は、生成された数列を AA として 1,000,000,000A11A22ANN1,000,000,000 - |A_1 - 1| - |A_2 - 2| - … - |A_N - N| 点となる。

テストケースは 4141 ケース与えられる。それぞれのテストケースについて、K=1000,1050,1100,,2950,3000K = 1000, 1050, 1100, …, 2950, 3000 である。すべてのテストケースに対する点数の和が、その提出の得点となる。

なお、11 ケースでも出力が不正であった場合、example_01 以外の点数は全て 00 点となる。

入力例0Copy

Copy
10 3
8
9
1
4
6
7
3
2
10
5
  • この入力は制約を満たしません。

出力例0Copy

Copy
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 のデータです。



2025-04-03 (Thu)
16:35:01 +00:00