#R0011. 「T1」积木高塔

「T1」积木高塔

题目背景

有一个 n×m n \times m 的矩阵 map map ,每一格都有一个由积木堆叠成的积木柱,它们拼在一起,就组成了一座积木高塔。

题目描述

给定一个 map map ,及其每一格积木柱的高度,求第 1 1 层到最高层之间每一层的积木数量之和。

任意两块积木都完全相同,且为正方体

输入格式

1 1 行两个整数 n,m n,m

接下来 n n 行,每行 m m 个数,表示每一个积木柱的高度。 .

输出格式

第一行一个整数 k k ,表示积木高塔的层数。

接下来 k k 行,表示每层的积木块总数。

## 输入输出样例

4 6
1 2 3 4 5 6
6 5 4 3 2 1
1 2 3 4 5 6
6 5 4 3 2 1
6
24
20
16
12
8
4
20 25
5 5 3 7 1 2 3 9 10 3 6 10 5 9 8 10 3 6 8 2 8 10 5 3 10
5 6 7 1 6 10 3 6 8 8 3 3 7 9 8 2 4 7 6 2 6 10 9 6 6
3 10 6 1 2 3 8 7 8 4 1 1 4 8 4 1 5 9 7 4 3 7 2 9 6
4 7 8 8 9 2 3 2 4 10 6 7 3 9 4 10 9 1 1 10 6 3 7 7 1
9 7 3 5 6 1 6 6 5 8 9 7 6 7 5 4 5 10 10 8 7 1 6 8 6
6 5 5 3 10 2 10 6 7 9 9 4 5 6 10 3 4 5 9 1 10 3 1 1 2
9 2 9 5 3 1 7 5 3 3 10 3 1 10 5 10 2 3 3 2 7 2 5 2 8
5 9 6 10 7 10 5 3 1 9 5 2 8 10 5 7 10 7 3 9 7 5 1 7 3
3 3 7 3 3 1 10 7 2 8 7 6 3 10 3 1 7 1 5 3 7 1 10 10 9
4 10 7 9 5 2 1 2 9 8 9 1 5 3 7 10 1 1 6 6 4 6 4 4 8
2 7 3 10 10 5 6 6 7 10 10 7 10 5 1 7 5 7 4 1 9 1 6 4 8
1 8 9 5 10 4 3 9 8 1 6 4 1 10 7 9 10 3 8 4 6 8 6 7 6
5 2 5 1 2 9 1 3 9 8 2 2 9 1 8 9 10 2 4 4 1 9 4 3 9
3 6 9 5 4 4 4 3 9 8 10 10 3 5 10 3 2 9 4 9 7 7 3 8 10
7 3 5 7 9 8 3 9 10 8 1 6 1 7 7 9 1 2 5 9 4 5 3 4 3
1 1 2 8 4 5 4 8 6 7 1 5 7 7 2 7 10 6 8 3 3 6 7 4 3
6 8 8 2 7 9 1 2 6 1 7 10 5 1 9 7 6 8 2 10 9 5 2 1 3
8 10 10 5 10 10 7 3 5 4 5 5 10 5 3 10 6 2 10 6 6 1 6 6 8
10 1 3 1 2 3 4 3 3 3 3 2 1 6 4 8 1 2 4 2 10 6 3 6 5
10 2 2 3 9 5 10 8 4 10 3 8 6 7 10 9 1 9 2 7 10 6 6 2 1
10
500
447
405
341
304
256
203
149
108
61

## 说明/提示

「本题采用捆绑测试」

数据范围:

对于 Subtask 0(20 pts) \mathrm{Subtask\ 0(20\ pts)} :

  • 1n,m102 1 \le n,m \le 10^2
  • 1k,mapij10 1 \le k,map_{ij} \le 10

对于 Subtask 1(30 pts) \mathrm{Subtask\ 1(30\ pts)}

  • 1n,m103 1 \le n,m \le 10^3
  • 1k,mapij10 1 \le k,map_{ij} \le 10

对于 Subtask 2(50 pts) \mathrm{Subtask\ 2(50\ pts)}

  • 1n,m5×103 1 \le n,m \le 5 \times 10^3
  • 1k,mapij10 1 \le k,map_{ij} \le 10

「本题数据量较大,请使用快速读入」

提供模板:

inline int read() {
	int x = 0, f = 1;
	char ch = getchar();
	while (ch < '0' || ch > '9') {
		if (ch == '-')
			f = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9')
		x = x * 10 + ch - '0', ch = getchar();
	return x * f;
}

使用时:

int a;
a = read();

即可。

时限:

对于 Subtask 0(20 pts) \mathrm{Subtask\ 0(20\ pts)}

  • 测试点 1,2,3 1,2,3 20 ms 20\ \mathrm{ms}

对于 Subtask 1(30 pts) \mathrm{Subtask\ 1(30\ pts)}

  • 测试点 4,5,6,7 4,5,6,7 50 ms 50\ \mathrm{ms}

对于 Subtask 1(30 pts) \mathrm{Subtask\ 1(30\ pts)}

  • 测试点 8,9 8,9 300 ms 300\ \mathrm{ms}
  • 测试点 10 10 800 ms 800\ \mathrm{ms}

注意:

  • 空间限制为 32 MB 32\ \mathrm{MB},小心 MLE \mathrm{MLE}