城市绿化评分提升
故事背景
某城市被划分成 n×m 个网格区域,每个格子都有一个“绿化评分”ai,j,用来衡量该区域的绿化水平。为了迎接环保检查,市政部门计划对若干块矩形区域进行集中整治,每次整治都会让一个矩形区域内所有格子的绿化评分同时提升(或下降)同样的数值。
在所有集中整治完成后,环保部门会给出一个目标评分下限 T,想知道最终有多少个格子的绿化评分不低于 T,从而评估整体达标情况。
请你帮助统计这个数量。
题目描述
给定一个 n×m 的整数矩阵 a,表示初始时每个格子的绿化评分。接下来有 q 次集中整治操作,每次操作给出五个整数 x1,y1,x2,y2,v,表示对所有满足
x1≤i≤x2,y1≤j≤y2
的格子 (i,j),将 ai,j 同时增加 v(v 可以为负数)。
所有操作执行完毕后,给定一个整数 T,请你统计最终矩阵中有多少个格子满足 ai,j≥T。
输入格式
- 第一行包含四个整数 n,m,q,T,分别表示行数、列数、操作次数和目标评分下限。
- 接下来 n 行,每行包含 m 个整数,表示初始矩阵 a。
- 接下来 q 行,每行包含五个整数 x1,y1,x2,y2,v,表示一次集中整治操作。
保证 1≤x1≤x2≤n,1≤y1≤y2≤m。
输出格式
输出一行,一个整数,表示所有操作执行完毕后,满足 ai,j≥T 的格子数量。
输入输出样例 #1
输入 #1
3 3 2 10
1 10 2
9 11 12
10 3 4
1 1 3 3 0
2 2 3 3 -1
输出 #1
3
样例解释 #1
初始矩阵中大于等于 10 的格子有 4 个,分别是 10,11,12,10。
第一次操作将全图每个格子加 0,无变化;第二次操作将右下 2×2 矩形内每个格子减 1,于是 11 变为 10,12 变为 11,右下角的 4 变为 3。
最终大于等于 10 的格子为 {10,10,11} 共 3 个。
数据范围
对所有数据,保证:
- 1≤n,m≤500;
- 1≤q≤2×105;
- −109≤ai,j≤109;
- −109≤v,T≤109;
- 所有中间结果与最终答案在 64 位有符号整数范围内。
要求程序在合理时间内完成所有操作并统计结果。