健佳正在用大小相同的砖块来砌起一面墙。这面墙由
健佳用如下方式来建造这面墙。最开始每列都没有砖块。此后,健佳通过
- 在增加砖块阶段,对于给定的列范围中高度小于
的列,健佳会增加砖块使它们的高度都恰好等于 。此时他不会改变那些高度大于或等于 的列。 - 在移除砖块阶段,对于给定的列范围中高度大于
的列,健佳会移除砖块使它们的高度都恰好等于 。此时他不会改变那些高度小于或等于 的列。
你的任务就是计算出这面墙的最后形状。
任务
给出这
- buildWall(n, k, op, left, right, height, finalHeight)
: 这面墙中的列数。 : 阶段数。- op: 大小为
的数组;op[i] 是第 个阶段的类型:1 表示增加阶段而 2 表示移除阶段,其中 。 - left 和 right: 大小为
的数组;在第 个阶段中,列的范围从第 left[i] 列开始到第 right[i] 列结束(包括两端 left[i] 和 right[i]),其中 。这里保证满足 left[i] right[i]。 - height: 大小为
的数组;height[i] 表示在阶段 的高度参数,其中 。 - finalHeight: 大小为
的数组;你需要把第 列砖块的最终数量存放到 finalHeight[i] 中做为返回结果,其中 。
子任务
在所有子任务中,所有阶段中的高度参数均为小于或等于
子任务 | 分值 | 备注 | ||
---|---|---|---|---|
1 | 8 | 无其他限制 | ||
2 | 24 | 全部增加阶段均在全部移除阶段之前 | ||
3 | 29 | 无其他限制 | ||
4 | 39 | 无其他限制 |
实现细节
本题只支持 C/C++。
你只能提交一个源文件实现上述的函数,其命名与接口需遵循下面的要求。你还要在该文件中包含头文件wall.h。
void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]);
评测方式
评测系统将读入如下格式的输入数据:
- 第
行: , 。 - 第
行:op[i], left[i], right[i], height[i]。
时间限制:
空间限制: