AtCoder Regular Contest 047

D - ナナメクエリ


Time limit時間制限 : 2sec / Memory limitメモリ制限 : 256MB

問題文

縦に N 行、横に N 列の方眼紙があります。

この方眼紙上の最も左上のマスから下に X マス、右に Y マス進んだところにあるマスをマス (X, Y) と呼ぶことにします。 つまり、最も左上のマスはマス (0, 0) 、右下のマスはマス (N-1, N-1) になります。

初め、全てのマスには整数 0 が書き込まれています。

この方眼紙に Q 回のクエリ操作を行うことを考えます。 クエリ操作は 3 種類あり以下のとおりです。

  • 1 A B C : A ≦ X+Y ≦ B となる全てのマス (X, Y) にかかれている整数に C を加える。0 ≦ A ≦ B ≦ 2N-2, -10^5 ≦ C ≦ 10^5 を満たすことが保証される。
  • 2 A B C : A ≦ X-Y ≦ B となる全てのマス (X, Y) にかかれている整数に C を加える。1-N ≦ A ≦ B ≦ N-1, -10^5 ≦ C ≦ 10^5 を満たすことが保証される。
  • 3 A B C D : A ≦ X ≦ B かつ C ≦ Y ≦ D となる全てのマス (X,Y) の中の最大値 M と、その範囲の中に M が書かれたマスがいくつあるか求める。0 ≦ A ≦ B ≦ N-1, 0 ≦ C ≦ D ≦ N-1 を満たすことが保証される。

このようなクエリを順番に処理するプログラムを書いてください。


入力

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

N Q
Query_1
Query_2
:
Query_Q
  • 1 行目には方眼紙の大きさを表す整数 N(1 ≦ N ≦ 5,000) とクエリの個数を表す整数 Q(1 ≦ Q ≦ 5,000)が空白区切りで与えられる。
  • 2 行目からの Q 行の内 i 行目には i 番目のクエリが与えられる。クエリの形式は問題文中で与えたとおりである。
  • 3 種類目のクエリは 1 個以上与えられる。

部分点

この問題には部分点が設定されている。

  • 1 ≦ N ≦ 50を満たすデータセットに正解した場合は 10 点が与えられる。
  • 1 ≦ N ≦ 500を満たすデータセットに正解した場合はさらに 20 点が与えられる。合計で30点となる。
  • 1 ≦ N ≦ 5,000 を満たすデータセットに正解した場合はさらに 70 点が与えられる。合計で100点となる。

出力

出力の行数は 3 種類目のクエリの個数と等しくなる。 i 行目には i 番目の 3 種類目のクエリの答えを出力せよ。 範囲の中の最大値を M、その個数を C とすると M, C をこの順で空白区切りで出力せよ。 出力の末尾に改行を入れること。


入力例1の説明にミスがあったため、正しいものに差し替えました(21:51)

入力例1

4 4
1 1 4 2
3 0 1 2 3
2 -2 1 3
3 0 3 1 3

出力例1

2 4
5 7

1 番目のクエリを処理した後の方眼紙の様子は以下の様になります。

2 番目のクエリの範囲は以下の様な範囲です。

よって最大値は 2、 個数は 4 個になります。

3 番目のクエリを処理した後の方眼紙の様子は以下の様になります。

4 番目のクエリの範囲は以下の様な範囲です。

よって最大値は 5、 個数は 7 個になります。


入力例2

50 20
2 5 40 6
1 69 94 5
3 8 39 31 32
2 -29 -21 -10
2 20 43 3
2 -37 36 -10
2 -18 45 5
2 30 39 -2
3 0 1 19 33
3 27 47 0 43
3 0 1 28 39
1 90 97 0
2 -46 31 7
1 81 81 4
1 11 54 3
3 10 29 26 30
1 39 45 3
1 70 97 -4
3 24 46 14 34
3 1 18 48 48

出力例2

11 5
-5 1
14 8
0 3
5 82
16 2
10 5

Submit提出する